1 条题解
-
0
思路
无向关系的传递闭包,输出分量数及最大大小,孤立点也成家族,重复关系不重复扣减。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; vector<int>p,sz;int f(int x){return p[x]==x?x:p[x]=f(p[x]);}int main(){int n,k;cin>>n>>k;p.resize(n+1);iota(p.begin(),p.end(),0);sz.assign(n+1,1);int cnt=n;while(k--){int a,b;cin>>a>>b;a=f(a);b=f(b);if(a!=b){p[b]=a;sz[a]+=sz[b];cnt--;}}int best=1;for(int i=1;i<=n;i++)if(f(i)==i)best=max(best,sz[i]);cout<<cnt<<' '<<best<<'\n';}
- 1