po姐說
把能進行會議的國家之間都用並查集連線起來,然後把每個進行過會議的國家扔進佇列跑bfs,將搜到的國家用並查集連線
最終答案等於每個單點的出度個數+2*c(每個集合的大小,2)
#include#include#include#include#define v g[p].v
using namespace std;
typedef long long ll;
inline char nc()
return *p1++;
}inline void read(int &x)
const int n=100005;
namespace tset
int fat(int u)
void union(int x,int y)
};int n,m;
ll ans;
int q[n],vst[n];
int l=-1,r=-1;
setm[n];
typedef set::iterator iter;
int main()
for(int i=1;i<=n;i++)
if(size[fat(i)]>1)
vst[i]=1,q[++r]=i;
while (l
並查集 好朋友
天勤書上一道題,很簡潔的展現了並查集的思想。大致意思是x和y是和朋友,xx和yy是好朋友.要你分組使組內都是好朋友,組外都不是好朋友。資料量比較小,很水,路徑壓縮不考慮也沒問題。includeusing namespace std define max 200 int father max bool...
PAT 朋友圈(並查集)
某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...
5 9 朋友圈 (並查集)
某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...