P1197 JSOI2008 星球大戰

2021-09-28 20:41:22 字數 1205 閱讀 1599

題目

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...