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