HDU1856
显然直接跑1e7的并查集会t,观察到最多1e5组关系,没有给出朋友关系的人对答案的贡献为0,所以考虑离散化以后再跑1e5规模的并查集。
1 #include<iostream> 2 #include<unordered_map> 3 using namespace std; 4 int f[10010]; 5 unordered_map<int,int> mp,mp1; //mp离散化 6 int m,ans=0,u,v,n=0; 7 8 void ini(){ 9 for (int i=1;i<=10009;i++) f[i]=i; 10 mp.clear(); 11 mp1.clear(); 12 ans=n=0; 13 } 14 15 int getf(int u){ 16 return u==f[u]?f[u]:f[u]=getf(f[u]); 17 } 18 19 void merge(int u,int v){ 20 f[getf(u)]=getf(v); 21 } 22 23 int main() 24 { 25 while (cin>>m){ 26 ini(); 27 while (m--){ 28 cin>>u>>v; 29 if (!mp[u]) mp[u]=++n; 30 if (!mp[v]) mp[v]=++n; 31 merge(mp[u],mp[v]); 32 } 33 for (int i=1;i<=n;i++) ans=max(ans,++mp1[getf(i)]); 34 cout<<ans<<endl; 35 } 36 return 0; 37 }

浙公网安备 33010602011771号