某學校有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
提示結果
耗時記憶體
0sample
答案正確
5 ms
256 kb
1最小m;有學生沒加入任何俱樂部
答案正確
5 ms
360 kb
2最大m和n,隨機
答案正確
62 ms
640 kb
#include #include #include using namespace std;
int par[100005];
int findparent(int x)
void unionset(int x, int y)
int main()
for (int j = 0; j < mk; j++) // 合併
for (int k = j+1; k < mk; k++)
unionset(v[j], v[k]);
}for (int i = 1; i <= n; i++) // 統計
mmp[findparent(i)]++; // 注意不是 mmp[par[i]]++
int most = 0;
for (map::iterator it = mmp.begin(); // 找最大朋友圈
it != mmp.end(); it++)
most = max(most, it->second);
cout << most;
return 0;
}
7 25 朋友圈 並查集) 25 分
某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入格式 輸入的第一行包含兩...
7 25 朋友圈 25分 並查集
參考 主要思路 1.將每個學生視為樹的乙個結點,用乙個陣列儲存每個結點的前驅結點,當只有乙個單獨的學生的時候,將前驅設為他本身。然後每行第乙個學生a與這一行的其餘學生b1 b2 bn分別作合併操作,即a所在的樹與bn所在的樹相比較,將深度小的那一棵樹的根節點x前驅設為深度大的那一棵樹的根節點y,這樣...
PTA 7 25 朋友圈 25分 (並查集)
7 25 朋友圈 25分 某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸...