洛谷1197 星球大戰(並查集 離線)

2021-08-29 22:32:00 字數 879 閱讀 2711

戰爭這道考試題說是和這道題差不多,然後就看了一下,維護的資訊比考試題更少了。。。。。。orz

跟考試題差不多,這道題也是離線先儲存所有摧毀點(很良心的是一次只有乙個點qwq),然後在最後的圖上dfs一遍,統計出最後的答案,然後往前加點,每次加點如果沒有與之前的聯通塊相連就ans++,否則如果連線了兩個不同聯通塊就ans--,最後正著輸出答案即可。

#includeusing namespace std;

const int maxn=4e5+10;

const int maxm=5e5+10;

int n,m,cnt,q,ans[maxn];

int fa[maxn];

int head[maxn];

int nxt[maxm],to[maxm];

int insta[maxn],sta[maxn],top;

int dfn[maxn],low[maxn],belong[maxn],tot,sum;

int des[maxn],sx[maxn],vis[maxn];

int read()

int find(int x)

void merge(int x,int y)

void add(int x,int y)

void dfs(int u,int f)

}int main()

int q=read();

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

merge(v,u);

flag=1;

}} if(!flag)

ans[i]++;

} for(int i=0;i<=q;++i)

cout

}

洛谷P1197 星球大戰 並查集

給出一張圖,每次刪除乙個點 以及連線它的邊 求每次刪除後的連通塊個數。時間倒流應該是很顯然的吧。由於並查集的刪除操作並不好搞,所以可以考慮反過來,把 刪除 變成 建造 首先用vec torv ecto r記錄每乙個點連線的邊。不需要用領接表,因為每條邊只需訪問1次。用que uequ eue會mle...

P1197 星球大戰 並查集 離線處理

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

洛谷P1197星球大戰 並查集,逆向思維

題目 思路 逆向思維 並查集刪邊特難,所以採用逆向操作。開始,n個點看作n個孤立點,記ans k n。然後每增加乙個摧毀點,令ans k 重要 逆向增加摧毀點,該點記為now,此時ans i 因為now是新增的孤立點。遍歷now的相鄰點,如果now與它的相鄰點祖先不一樣,則合併,同時ans i 採用...