JSOI 2008 星球大戰(反向並查集)

2022-05-04 09:18:10 字數 790 閱讀 7355

這是傳送門

正難即反

我們先把所有安全的邊先連起來,

然後倒序列舉每個攻擊,對於乙個攻擊,並查集維護被攻擊點與其他點的關係即可

#include#define n 400005

#define m 200005

using

namespace

std;

intn,m,tot,first[n],k,at[n];

bool

broken[n];

struct

node

edge[

2*m];

inline

void addedge(int x,int

y)int

father[n];

inline

int getfather(int

x)inline

void merge(int x,int

y)int

ans[n];

intmain()

cin>>k;

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

int cnt=n-k;

//先連安全邊

for(int i=1;i<=2*m;i++)

} ans[k+1]=cnt;

for(int i=k;i>=1;i--)

} ans[i]=cnt;

}for(int i=1;i<=k+1;i++) cout<'\n'

;

return0;

}

jsoi2008 星球大戰

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

JSOI 2008 星球大戰

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

JSOI2008 星球大戰

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