題目
p1197 [jsoi2008]星球大戰 分析
看完題目,第一眼就是想到,我們反過來不斷把新的邊加入,然後利用陣列儲存答案,最後逆序輸出。
① num 陣列用來給破壞的星球編號(從大到小),為什麼要編號呢?因為後面 sort 排序是根據這個編號來的。
② 預處理時,我們以兩個星球中 x, y 最大值作為該邊的編號。
ac**
#include
#include
#include
#include
#include
using
namespace std;
int n, m, k, cnt;
int f[
400005
], num[
400005];
vector<
int> ans;
// 儲存邊
struct node
}node[
400005];
// 初始化
void
init()
}// 並查集模板
intgetf
(int x)
int t =
getf
(f[x]);
return f[x]
= t;
}void
merge
(int u,
int v)
}int
main()
scanf
("%d"
,&k)
;for
(int i = k; i >=
1; i--
)for
(int i =
1; i<= m; i++
)sort
(node +
1, node +
1+ m)
;int j =1;
for(
int i =
0; i <= k; i++
) ans.
push_back
(cnt -
(k - i));
//k-i是帝國攻占的星球個數(因為是逆序處理的)
}for
(int i = k; i>=
0; i--
)return0;
}
P1197 JSOI2008 星球大戰
思路和關閉農場差不多,不過加了一些時間上的優化。當我們加入乙個點時,先假設又加入乙個單獨的連通塊,然後再掃一下與它相連的點如果在圖中但是與它不在乙個聯通塊中,那麼就將其合併,連通塊個數減一。注 並查集的題果斷找祖宗。include include include include define n 4...
P1197 JSOI2008 星球大戰
很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫地摧毀反抗軍占領的...
P1197 JSOI2008 星球大戰
思路和關閉農場差不多,不過加了一些時間上的優化。當我們加入乙個點時,先假設又加入乙個單獨的連通塊,然後再掃一下與它相連的點如果在圖中但是與它不在乙個聯通塊中,那麼就將其合併,連通塊個數減一。注 並查集的題果斷找祖宗。include include include include define n 4...