JSOI2008星球大戰 聯通塊數量

2022-05-12 13:38:57 字數 637 閱讀 6767

題目:

此題不能按時間順序進行刪點、求連通塊數量,而應打破時間的思維,先形成一張沒有要刪去的點的圖,再從後往前逐個加點,儲存連通塊數量;

這樣將刪點問題轉化為倒序的加點問題,通過並查集快速求出新圖中連通塊數量。

**如下:

#include#includeusing namespace std;

int n,m,k,a,b,ct,cnt[400005],pla[400005],fa[400005],ans[400005],s;

bool c[400005];

struct nedge[400005];

int find(int x)

void add(int x,int y)

int main()

scanf("%d",&k);

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

scanf("%d",&pla[i]),c[pla[i]]=1;

s=n-k;

for(int i=0;i=1;i--) }

printf("%d\n",s);

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

printf("%d\n",ans[i]);

return 0;

}

jsoi2008 星球大戰

題目描述 很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫地摧毀反...

JSOI 2008 星球大戰

題目傳送門星球大戰 題目描述 很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝...

JSOI2008 星球大戰

題意簡述 給出n個點的無向圖,每次刪去乙個點,詢問當前的連通塊個數。刪點太難做,不如加點,首先將詢問讀取,然後離線倒著處理。標記每個已經刪去的點,首先計算出所有沒標記的點一共組成多少個連通塊。然後依次加點,同時刪去標記,首先將連通塊個數增加1,而當前點每與其他的連通塊相連,連通塊個數減少1,最終算出...