POJ 1611經典並查集

2022-01-19 21:03:58 字數 662 閱讀 8122

題意:n,m。n個人,編號0-n-1,m個組合:第乙個數表示本集合個數,後面是成員。乙個成員可以在多個集合裡。0號是病人,跟她乙個組合的全是病人,問一共有多少人患病。

解析:直接並查集基本模板,加入乙個vis陣列來記錄與本節點相連的樹的元素個數。最後輸出vis[0]即可。vis[i]=1的乙個初始化記得加。

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=3e4+10

;int

pr[maxn];

intvis[maxn];

int sum=0

;int

n,m;

int find(int

x)

returnx;}

void join(int x1,int

x2)

return;}

void

first()

}int

main()

}cout

<0)]<}}

poj1611 帶權並查集

題意 有 個學生,個組,每個學生可能屬於多個組,現在 號得了 和 號一組的也會得,然後和 號一組的人,他所在的組的組員也全會得,問最後總共幾個人得了 思路 只要加乙個權值,就是這個組有多少個人 如r i 表示 所在的組有多少人 所以每次並的時候,也要把這個組的人數並過去 最後陣列 所在的組有幾個人 ...

poj 1611 並查集 題解記錄

解析 本題本質就是並查集的變形,我的想法是每一組輸入時,把最小的數作為全組的父節點,然後用乙個set記錄下所有資料 剔除重複數 最後再for迴圈set中的資料,如果該資料的父節點是0,那麼就是有被感染的嫌疑。如下 include include include includeusing namesp...

poj 1611 壓縮路徑 並查集

題意 n個人m個組,每個人可以參加多個組,也可以一組不參加。第乙個人感染,與他同組的人均感染,與感染的人同組的人均感染。問有幾個人感染。n 30000,m 500。題解 壓縮路徑並查集 1.這個題裸的並查集過不了,得用壓縮路徑。2.壓縮路徑就是把每個結點都直接指向根節點。中附帶壓縮路徑的注釋。inc...