首页 > 其他分享 >L3-003 社交集群

L3-003 社交集群

时间:2024-04-03 09:00:22浏览次数:23  
标签:f1 f2 int res 003 fa L3 tno 社交

并查集的应用,我感觉这题不是很容易想出来。然后....代码看注释吧。
写法一,

#include <bits/stdc++.h>
using namespace std;
int a[1010][1010],fa[1010];
int getf(int x){
	while(fa[x]!=-1){
		x=fa[x];
	}
	return x;
}
void merge(int x,int y){
	int f1 =getf(x);
	int f2 =getf(y);
	if(f1==f2) return;
	fa[f1]=f2;
}
int main(){
    int n;
    cin>>n;
    memset(fa,-1,sizeof(fa));
    for(int i=1;i<=n;i++){//第i个人 
    	int count;
    	cin>>count;
    	cin.get();
        while(count--){
        	int tno;
        	cin>>tno;//兴趣编号
			for(int j=1;j<i;j++){//遍历之前的人 
				if(a[j][tno]){
					merge(i,j);
				}
			} 
            a[i][tno]=1;
		}
	}
	map<int,int> mp;//集群的根,集群里面的人数 
	for(int i=1;i<=n;i++){
		int root =getf(i);
		mp[root]++;
	}
	vector<int> res;
	for(auto x : mp){
		res.push_back(x.second);//人数排序 
	}
	sort(res.begin(),res.end(),greater<int>());
	int flag = 0;
	cout << res.size() << '\n';
	for(int i=0;i<res.size();i++){
		if(flag) cout<<" ";
		cout<<res[i];
		flag++;
	}
	return 0;
}

写法二,

#include <bits/stdc++.h>
using namespace std;
int record[1010],fa[1010];//record[i]为兴趣爱好编号为i的人 
int getf(int x){
	while(fa[x]!=-1){
		x=fa[x];
	}
	return x;
}
void merge(int x,int y){
	int f1 =getf(x);
	int f2 =getf(y);
	if(f1==f2) return;
	fa[f1]=f2;
}
int main(){
	memset(fa,-1,sizeof(fa));
	int n;
	cin>>n;
    for(int i=1;i<=n;i++){//第i个人 
    	int count;
    	cin>>count;
    	cin.get();
    	while(count--){
    		int tno;
    		cin>>tno;
    		if(record[tno]){
    			merge(i,record[tno]);
		    }else{
		    	record[tno]=i;
			}
		}
	}
	map<int,int> mp;//集群的根,集群里面的人数 
	for(int i=1;i<=n;i++){
		int root =getf(i);
		mp[root]++;
	}
	vector<int> res;
	for(auto x : mp){
		res.push_back(x.second);//人数排序 
	}
	sort(res.begin(),res.end(),greater<int>());
	int flag = 0;
	cout << res.size() << '\n';
	for(int i=0;i<res.size();i++){
		if(flag) cout<<" ";
		cout<<res[i];
		flag++;
	}
	return 0;
}

标签:f1,f2,int,res,003,fa,L3,tno,社交
From: https://www.cnblogs.com/chengyiyuki/p/18111893

相关文章

  • L3-002 特殊堆栈
    维护两个栈。一个正常放数据,另一个是排序好的数据。#include<bits/stdc++.h>usingnamespacestd;intmain(){ vector<int>data; vector<int>mdata; vector<int>::iteratorit; intn; cin>>n; while(n--){strings; cin>>s; if(s==......
  • L3-001 凑零钱
    一道很简单的DFS。#include<bits/stdc++.h>usingnamespacestd;intn,m,a[10010];vector<int>res;voiddfs(intstart,intown){ for(inti=start;i<n;i++){ if(own+a[i]>m)return; elseif(own+a[i]==m){ res.push_back(a[i]); intflag=0;......
  • 提防“摸鱼”:社交聊天与购物的数据安全警钟
    随着科技的发展,职场中有越来越多的人会在工作时使用社交聊天软件和在线购物平台。然而,越多的工作时间被社交和购物占据,也就越有可能引发数据泄露。不论是意识到还是无意识的,内部人员都有可能成为数据安全的最大威胁。此文将聚焦如何防止社交聊天、购物等行为引发数据泄露。数据......
  • #C1003. 【比赛题】小核桃与数位游戏
    题目描述在中国,4这个数字不大家所喜欢,在外国,13这个数字不被大家喜欢,小核桃想要编写一个程序,来检查输入的数字x中有没有被大家所讨厌的数字4,或是13。例如1134这个数字,既含有数字13,又含有数字4,所以这是一个被讨厌的数字。输入格式输入包括一行,包含一个整数n,表示要判断是否为......
  • 00342第四章 结构化程序设计 思考题和练习题(C语言)
    一、单项选择题1.若从键盘输入字符串"HOWAREYOU?",可以直接使用库函数【】。        A.scanf    B.getstr    C.gets    D.都不能直接使用2.C语言的库函数中,可以输出double型变量值的是【】。        A.getchar   ......
  • 七星即拼模式:社交电商新纪元的高效助力器
    七星即拼模式,作为一种创新的社交电商拼团方式,近年来在电商领域崭露头角,成为推动品牌增长和销售提升的高效助力器。这种模式不仅融合了社交互动与电商购物的优势,还通过一系列创新机制,为消费者和商家带来了前所未有的便利和价值。首先,七星即拼模式实现了购物的即时性和高效性。......
  • 003 git的日常操作-新建分支
    新建分支一、本地仓库与远程仓库都无此分支创建本地分支dev并将其关联到远程仓库的origin/dev分支。步骤:检查当前所在分支,确保不在dev分支上:gitbranch如果不在dev分支上,切换到master或其他主分支-取决于你想让该分支拥有那个分支的数据:gitcheckoutmaster......
  • V R社交平台的用处|虚拟现实体验馆加盟|V R设备在线价格
    VR(虚拟现实)社交平台的用处可以体现在以下几个方面:    VR社交平台不仅可以丰富用户的社交体验,还可以在教育、艺术、商务等领域发挥重要作用,为用户提供更加多样化、互动性强的社交平台体验。VR游乐设备|VR娱乐设备|VR体验|VR设备加盟|VR数字乐园|VR+超感地带|西红柿......
  • 【全开源】JAVA多商户运营版商城系统源码地摊兄源码多商户源码社交电商源码支持Androi
    "多商户运营版商城系统源码——地摊兄源码多商户源码社交电商源码",是现今电商领域的一大突破。此源码设计独特,功能全面,既满足了多商户运营的需求,又融入了社交电商的理念。通过这套源码,商家可以轻松搭建起一个功能强大的电商平台,实现多商户的集中管理与运营,提升整体运营效率和用......
  • 基于 DYNAMIXEL XL330 舵机的5自由度机械臂
    完整视频链接:https://www.bilibili.com/video/BV1Yz421f7AK/?spm_id_from=333.999.0.0&vd_source=9456951d706e2acc026e424d8a228909 ProjectDescription:A5DOFrobotarmusingtheDynamixelXL-330andArduinoMKR.Allpartsoftherobotarmare3Dprintedusing......