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 } 

 

posted @ 2020-04-28 16:58  White_Li  阅读(126)  评论(0)    收藏  举报