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

2021-09-24 17:00:35 字數 735 閱讀 4704

題目:

思路:逆向思維——並查集刪邊特難,所以採用逆向操作。

開始,n個點看作n個孤立點,記ans[k]=n。然後每增加乙個摧毀點,令ans[k]--。

【重要】逆向增加摧毀點,該點記為now,此時ans[i]++,因為now是新增的孤立點。遍歷now的相鄰點,如果now與它的相鄰點祖先不一樣,則合併,同時ans[i]--。

採用前向星存圖。

採用並查集。

ac**:

#include#include#includeusing namespace std;

const int maxm=200005;

int n,m,k,x,y,cui[2*maxm],ans[2*maxm],far[2*maxm];

struct edgeedge[2*maxm];

bool ***[2*maxm],vis[2*maxm];

int num,head[2*maxm],hd,tl,que[2*maxm];

void joinn(int x,int y)

int father(int x)

void unionn(int x,int y)

void bfs(int now)

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

} }for(int i=0;i<=k;i++)printf("%d\n",ans[i]);

return 0;

}

洛谷P1197 星球大戰 並查集

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

洛谷 P1197星球大戰

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

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

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