天勤書上一道題,很簡潔的展現了並查集的思想。
大致意思是x和y是和朋友,xx和yy是好朋友......要你分組使組內都是好朋友,組外都不是好朋友。
資料量比較小,很水,路徑壓縮不考慮也沒問題。
#includeusing namespace std;
#define max 200
int father[max];
bool isroot[max];
void init(int n)//初始化小朋友,每個人都是乙個組
}int findfather(int x)//查詢x小朋友的大大
while(temp!=father[temp])
return x;
}void union(int a,int b)//合併兩個小朋友,成為組內好朋友
}int main()
for(int i=1;i<=m;++i)
for(int i=1;i<=n;++i)//利用根節點為真來統計分組情況
int sum=0;
for(int i=1;i<=n;++i)
cout<
並查集專題 好朋友 (求連通塊個數)
5 63求解無向圖的連通塊數目。並查集模板題。最後統計合併後,有多少個不同的集合就可以。include include include using namespace std const int nmax 110 int father nmax 存放父親節點 bool isroot nmax 記錄某...
PAT 朋友圈(並查集)
某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...
5 9 朋友圈 (並查集)
某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...