poj1611 帶權並查集

2021-07-02 05:25:58 字數 519 閱讀 1304

題意:

有n個學生,m個組,每個學生可能屬於多個組,現在0號得了sars;

和0號一組的也會得,然後和0號一組的人,他所在的組的組員也全會得,問最後總共幾個人得了sars;

思路:只要加乙個權值,就是這個組有多少個人;如r[i]表示i所在的組有多少人;

所以每次並的時候,也要把這個組的人數並過去;

最後陣列0所在的組有幾個人;

#include#include#includeusing namespace std;

const int n = 30000 + 10;

int p[n], r[n], n, m;

void init(int x)

}int find_p(int x)

void union(int x,int y)

}int main()

} int ans = find_p(0);

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

}}

POJ1611基礎帶權並查集

題意 有乙個人生病了,和他乙個社團或者間接和他有聯絡的人都會生病,問一共有多少人生病了。思路 比較簡單和基礎的題,帶權並查集中的一種,就是記錄更新集合元素個數,這個題目我是開始的時候每個人自己在自己的集合裡,元素個數是1,然後在多開出來m個集合,讓第i個社團直接對映到i n個集合,元素個數一開始是0...

POJ 1611經典並查集

題意 n,m。n個人,編號0 n 1,m個組合 第乙個數表示本集合個數,後面是成員。乙個成員可以在多個集合裡。0號是病人,跟她乙個組合的全是病人,問一共有多少人患病。解析 直接並查集基本模板,加入乙個vis陣列來記錄與本節點相連的樹的元素個數。最後輸出vis 0 即可。vis i 1的乙個初始化記得...

poj 1611 並查集 題解記錄

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