C 並查集練習題朋友圈

2021-09-14 00:10:48 字數 998 閱讀 4059

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據「我的朋友的朋友也是我的朋友」這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。

輸入的第一行包含兩個正整數n(≤30000)和m(≤1000),分別代表學校的學生總數和俱樂部的個數。後面的m行每行按以下格式給出1個俱樂部的資訊,其中學生從1~n編號:

第i個俱樂部的人數mi(空格)學生1(空格)學生2 … 學生mi

輸出給出乙個整數,表示在最大朋友圈中有多少人。

7 4

3 1 2 3

2 1 4

3 5 6 7

1 6

4
注意,並查集本身並不能統計出最大朋友圈中的人數,還需要借助乙個陣列才能完成統計。這裡有乙個小技巧就是求最大值和統計可以同時進行。

#include #include #define maxn 30005

class unionfind

} ~unionfind()

int find(int p)

return p;

} bool isconnected(int p, int q)

void unionelements(int p, int q)

count--;

} int size()

};int main()

; std::cin >> n >> m;

unionfind u = unionfind(n);

for (int i = 0; i < m; i++)

} int res = 0;

for (int i = 0; i < n; i++)

std::cout << res << std::endl;

}

海賊OJ並查集練習題 朋友圈

題目描述 所謂乙個朋友圈子,不一定其中的人都互相直接認識。現在給出一些人的朋友關係,人按照從 1 到 n 編號在這中間會進行詢問某兩個人是否屬於乙個朋友圈,請你編寫程式,實現這個過程。輸入 第一行輸入兩個整數 n,m 1 n 10000,3 m 100000 分別代表人數和運算元。接下來 m 行,每...

PAT 朋友圈(並查集)

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...

5 9 朋友圈 (並查集)

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...