並查集 好朋友

2021-07-01 18:15:36 字數 702 閱讀 5235

天勤書上一道題,很簡潔的展現了並查集的思想。

大致意思是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...