首页 > 其他 > 详细

AtCoder Beginner Contest 177 D - Friends (并查集)

时间:2020-09-02 10:57:42      阅读:61      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:有\(n\)个人,给你\(m\)对朋友关系,朋友的朋友也是朋友,现在你想要将他们拆散放到不同的集合中,且每个集合中的人没有任何一对朋友关系,问最少需要多少集合.

  • 题解:首先用并查集将朋友关系维护到集合中,然后贪心,其实我们所需要的集合数就是之前并查集维护的集合中的最大元素个数.

  • 代码:

    int n,m;
    int u,v;
    int p[N];
    map<int,int> mp;
    
    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);
    	n=read();
    	m=read();
    	for(int i=1;i<=n;++i) p[i]=i;
    	for(int i=1;i<=m;++i){
    		u=read();
    		v=read();
    		p[find(u)]=find(v);
    	}
    
    	for(int i=1;i<=n;++i){
    		mp[find(i)]++;
    	}
    
    	int res=0;
    	for(auto w:mp){
    		res=max(res,w.se);
    	}
    
    	printf("%d\n",res);
    
        return 0;
    }
    

AtCoder Beginner Contest 177 D - Friends (并查集)

原文:https://www.cnblogs.com/lr599909928/p/13600141.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!