原题链接:2562dfjsakfja.pdf (hznu.edu.cn)
解题思路:并查集模板题,总之就是资源种类相同的数为一个集合,求最大集合的数字个数就可以,注意有一个点要特判(我被卡了好久
ac代码:
#include <bits/stdc++.h> using namespace std; int p[100010]; int size[100010]; int find(int x) { if(p[x]!=x) p[x]=find(p[x]); return p[x]; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; while (cin >> n >> m) { for (int i=1;i<=n;i++) { size[i]=1; p[i]=i; } while(m--) { int a,b; cin >> a >> b; if(find(a)==find(b)) continue; //注意这里要特判,如果输入的两个数已经在一个集合中的话,size就不要加了,直接continue size[find(b)] += size[find(a)]; p[find(a)]=find(b); } int max=-1; for (int i=1;i<=n;i++) { if(size[find(i)]>max) { max=size[find(i)]; } } // for (int i=1;i<=n;i++) // { // cout << size[i] << ' ' ; // } cout << max << endl; } return 0; }