• Codeup:More is better


    题目链接

    题意:

    ​ 有10000000个元素,给定n对数字A,B,将A,B所在的集合合并(一开始每个元素所在的集合只有它自己),选择一个元素所在的集合,求这个集合的元素个数最多为多少?

    思路:

    ​ 典型的并查集题型,但除了要用到基础的合并外,还多了求集合大小和最大的集合大小的操作,这是需要自己去思考并解决的,首先如果把一千万个元素都扫一遍,显然会超时。那么既然大多数的元素都没有被合并,那么只需要管出现了的元素就行了,我用了set来记录出现过的元素。而至于元素的大小,只需要在扫的时候将同一集合的个数++就行了。一趟下来的时间复杂度为O(nlog2(n))。

    100分AC代码:
    #include <bits/stdc++.h>
    using namespace std;
    int m,n=100000;
    int f[100005];
    int find(int x){
    	if(f[x]==x)return x;
    	return f[x]=find(f[x]);
    }
    void uni(int x,int y){
    	int fx=find(x);
    	int fy=find(y);
    	f[fx]=fy;
    }
    int main() {
    	while(cin>>m){
    		int ans=1;//注意ans要为1
    		map<int,int> a;
    		set<int> b;
    		memset(f,0,sizeof(f));
    		for(int i=1;i<=n;i++)f[i]=i;
    		for(int i=1;i<=m;i++){
    			int x,y;
    			cin>>x>>y;
    			uni(x,y);
    			b.insert(x);
    			b.insert(y);
    		}
    		for(set<int>::iterator it=b.begin();it!=b.end();it++){
    			a[find(*it)]++;
    			ans=max(ans,a[find(*it)]);
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

    大功告成!

  • 相关阅读:
    JS入门(二)
    JavaScript中冒泡排序
    JS入门(一)
    页面的编写(二)
    页面的编写(一)
    编写页面之前的准备
    2019 ICPC徐州网络赛 K.Center
    2019 ICPC徐州网络赛 B.so easy(unordered_map)
    2018-2019 ICPC焦作区域赛B
    2019南昌ICPC网络赛 H.The Nth Item(矩阵快速幂+欧拉降幂+数学处理)
  • 原文地址:https://www.cnblogs.com/returnG/p/13149125.html
Copyright © 2020-2023  润新知