1922 Sdoi2010 大陸爭霸

2021-07-23 23:22:14 字數 2783 閱讀 6916

time limit: 10 sec  

memory limit: 64 mb

submit: 1552  

solved: 682 [

submit][

status][

discuss]

在乙個遙遠的世界裡有兩個國家:位於大陸西端的傑森國和位於大陸東端的 克里斯國。兩個國家的人民分別信仰兩個對立的神:傑森國信仰象徵黑暗和毀滅 的神曾·布拉澤,而克里斯國信仰象徵光明和永恆的神斯普林·布拉澤。 幻想歷 2023年 1月,傑森國正式宣布曾·布拉澤是他們唯一信仰的神,同 時開始**在傑森國的信仰斯普林·布拉澤的克里斯國教徒。 幻想歷 2023年 3月2日,位於傑森國東部小鎮神諭鎮的克里斯國教徒發動 起義。 幻想歷 2023年 3月7日,神諭鎮的起義被傑森國大軍以殘酷手段鎮壓。 幻想歷 2023年 3月8日,克里斯國對傑森國宣戰。由數十萬大軍組成的克 里斯軍團開至兩國邊境,與傑森軍團對峙。 幻想歷 2023年 4月,克里斯軍團攻破傑森軍團防線進入神諭鎮,該鎮倖存 的克里斯國教徒得到解放。 戰爭隨後進入膠著狀態,曠日持久。戰況慘烈,一時間槍林彈雨,硝煙瀰漫, 民不聊生。 幻想歷 2023年 5月12日深夜,斯普林·布拉澤降下神諭:「trust me, earn eternal life.」克里斯軍團士氣大增。作為克里斯軍團的主帥,你決定利用這一機 會發動奇襲,一舉擊敗傑森國。具體地說,傑森國有 n 個城市,由 m條單向道 路連線。神諭鎮是城市 1而傑森國的首都是城市 n。你只需摧毀位於傑森國首都 的曾·布拉澤大神殿,傑森國的信仰,軍隊還有一切就都會土崩瓦解,灰飛煙滅。 為了盡量減小己方的消耗,你決定使用自爆機械人完成這一任務。唯一的困 難是,傑森國的一部分城市有結界保護,不破壞掉結界就無法進入城市。而每個 城市的結界都是由分布在其他城市中的一些結界發生器維持的,如果想進入某個 城市,你就必須破壞掉維持這個城市結界的所有結界發生器。 現在你有無限多的自爆機械人,一旦進入了某個城市,自爆機械人可以瞬間 引爆,破壞乙個目標(結界發生器,或是傑森國大神殿),當然機械人本身也會 一起被破壞。你需要知道:摧毀傑森國所需的最短時間。

第一行兩個正整數 n, m。 接下來 m行,每行三個正整數 ui, vi, wi,表示有一條從城市ui到城市 vi的單 向道路,自爆機械人通過這條道路需要 wi的時間。 之後 n 行,每行描述乙個城市。首先是乙個正整數 li,維持這個城市結界所 使用的結界發生器數目。之後li個1~n 之間的城市編號,表示每個結界發生器的 位置。如果 li = 0,則說明該城市沒有結界保護,保證l1 = 0 。

僅包含乙個正整數 ,擊敗傑森國所需的最短時間。

6 6

1 2 1

1 4 3

2 3 1

2 5 2

4 6 2

5 3 2

0 0

0 1 3

0 2 3 5

5對於 20%的資料,滿足 n≤15,m≤50; 

對於 50%的資料,滿足 n≤500,m≤6,000; 

對於 100%的資料,滿足 n≤3,000,m≤70,000,1≤wi≤108

。 輸入資料保證一定有解,且不會存在維持某個城市結界的結界發生器在這個

城市內部。 

連線兩個城市的道路可能不止一條, 也可能存在乙個城市自己到自己的道路。

第一輪day1 [

submit][

status][

discuss]

用最短路的dijkstra演算法,,

每個點維護du[i],dis[i],ok[i]

分別為還有多少結界沒被消除?到達該點的最短路?消除所有結界最長耗時?

每次取出du[i]為0,max(dis[i],ok[i])最小的點擴充套件

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 3e3 + 30;

typedef long long ll;

const ll inf = 1e18;

struct e

e(int to,ll w): to(to),w(w){}

};struct data

data(int num,ll w): num(num),w(w){}

bool operator < (const data &b) const

};typedef __gnu_pbds::priority_queue,__gnu_pbds::pairing_heap_tag> heap;

int n,m,du[maxn];

ll dis[maxn],ok[maxn];

bool mark[maxn],vis[maxn],inq[maxn];

heap q;

vector v[maxn];

vector def[maxn];

int getint()

int main()

for (int i = 1; i <= n; i++)

} for (int i = 2; i <= n; i++) dis[i] = inf;

q.push(data(1,0));

while (!q.empty())

for (int i = 0; i < v[k.num].size(); i++)

} }cout << max(dis[n],ok[n]);

return 0;

}

bzoj1922 Sdoi2010 大陸爭霸

傳送門 我們假設d1 i 表示機械人到達i的最短時間 d2 i 為結界消失的最短時間 則乙個點可以被訪問到的最短時間為max d1 i d2 i 我們跑一遍最短路 等到該節點滿足條件就向外擴充套件 include include include include include include def...

bzoj1922 Sdoi2010 大陸爭霸

題目鏈結 一張無向圖,每個節點被k個節點保護,想要走到乙個節點當且僅當它不被保護。你可以從1號節點放出無限個炸彈去炸毀節點,問最少需要多久才可以炸毀n號節點。昨天考試題。一看就是最短路然後帶一些特殊處理,怎麼特殊處理呢?我們使用dijkstra來做這道題,因為spfa可以重複入隊,所以是錯誤的。每次...

P2446 SDOI2010 大陸爭霸

幻想歷8012年5月12日深夜,斯普林 布拉澤降下神諭 trust me,earn eternal life.克里斯軍團士氣大增。作為克里斯軍團的主帥,你決定利用這一機會發動奇襲,一舉擊敗傑森國。具體地說,傑森國有n個城市,由m條單向道路連線。神諭鎮是城市1而傑森國的首都是城市n。你只需摧毀位於傑森...