1107 Social Clusters
这道题目给出的示例如上图所示,一共有1-8这8个人(圆形),他们拥有1-10这10个兴趣爱好(方形),一人可以有多个爱好,拥有共同爱好的人被视为一个社区的。现在给出每个人的爱好情况,求出社区的个数,并按照从大到小将社区的人数输出。
1. 起初我测试点1不通过,因为试图用一个vector<int> hobby[maxn]的数据结构,把每个社区的人的编号都读入,然后再和第一个人进行合并。实际上完全可以用int hobbyFirst[maxn],将该社区的第一个人的编号读入,再有来者,把来着和这第一个人合并到同一社区即可。(边读入,边合并)
2. 这是并查集下的一道题,所以一定会有父亲数组F[maxn],另外还开了一个数组number[maxn],用于记录每个社区的人数(不需要知道每个社区有哪些人,只需要知道有多少人),并且直接对其排序后输出。
3. 查找和合并函数要会写,没什么好说的,就是合并函数我起初写的时候最后一个不是把两个根节点合并,这点要注意。
AC代码
#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<cmath>
typedef long long LL;using namespace std;const int maxn = 1010;int F[maxn];//存放每个节点的父亲节点
int number[maxn] = {0};//存放每个社区的人数 int findSource(int x){int a = x;while(x!=F[x]){x = F[x];}//压缩路径 while(a!=F[a]){int z = a;a = F[a];F[z] = x; }return x;
}void unite(int a,int b){//将a和b所在的集合合并 int sa = findSource(a);int sb = findSource(b);if(sa!=sb){F[sa] = sb;}
}int main(){int n;//总人数 int hobbyFirst[maxn] = {0};//hobby[i]存放的是拥有i这个爱好的第一个人的编号 scanf("%d",&n);int num,idx;char c;//将所有人都初始化为根节点 for(int i=1;i<=n;i++){F[i] = i;}for(int i=1;i<=n;i++){scanf("%d:%c",&num,&c);//读入当前这个人的爱好个数 for(int j=0;j<num;j++){scanf("%d",&idx);//读入当前爱好编号 if(hobbyFirst[idx]==0)hobbyFirst[idx] = i;//如果这个爱好是第一次有人喜欢 else unite(i,hobbyFirst[idx]);//把当前这个人和拥有这个爱好的第一人放到同一个社区 }}for(int i=1;i<=n;i++){int sidx = findSource(i);number[sidx]++;//该社区的人数 }sort(number+1,number+1001);int lastIdx;for(int i=1000;i>=1;i--){if(number[i]==0){lastIdx = i;//997break;}} printf("%d\n",1000-lastIdx);for(int i=1000;i>lastIdx;i--){printf("%d",number[i]);if(i!=lastIdx+1)printf(" ");}return 0;
}
相关文章:

c#直接调用ssis包实现Sql Server的数据导入功能
调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能。思前想后,决定还是贴一下增强记忆,高手请54.1、直接调用ssis包,需要引用Microsof…

从入门到放弃的javaScrip——队列
队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 现实中,很常见的例子就是…

css控制不换行
white-space:nowrap; 转载于:https://www.cnblogs.com/w8104254/p/4178198.html

(C++)堆排序的3个关键函数
堆排序:指使用堆结构对一个序列进行排序。所以,首先要有一个堆结构。 此处讨论递增排序。以及用最大堆。 注意:让存放堆的数组作为全局变量,n为元素个数,数组存放元素从下标1开始,n结束。 int heap[11] …

android 横竖屏限制如何配置
在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。 ndroid:screenOrientation"landscape"是限制此页面横屏显示, ndroid:screenOrientation"portrait"是…

Java面试题总结-Day4
<?xml version"1.0" encoding"utf-8"?> Java面试题总结-Day4Java面试题总结-Day4 Table of Contents 1. ArrayList和LinkedList区别 1.1. 是否线程安全1.2. 底层数据结构1.3. 插入和删除是否受元素位置的影响1.4. 是否支持快速随机访问1.5. 内存空…

Linux 使用者身份與群組記錄的檔案
在我們Linux系統當中,預設的情況下,所有的系統上的帳號與一般身份使用者,還有那個root的相關資訊, 都是記錄在/etc/passwd這個檔案內的。至於個人的密碼則是記錄在/etc/shadow這個檔案下。 此外,Linux所有的群組名稱都…

1098 Insertion or Heap Sort 需再做
1. 应该还做过一道类似的题目,也是要求判断属于哪种排序的中间过程,并要求写出下一轮排序结果,这次的进步是上来就知道用向量存数据,这样方便直接比较,而且下标0不能存元素,因为堆排序的堆是一个完全二叉树…

基于node.js的压缩合并安装
1.构建工具(grunt,gulp) 下载地址:http://gruntjs.cn/http://gruntjs.com/(1)安装nodejs(http://www.nodejs.org/) 验证是否安装成功,命令行输入 node -v (2)grunt 的安装 安装全局…

jenkins 修改工作目录
修改Jenkins路径 Jenkins的默认安装路径是/var/lib/jenkins 现在由于这个根目录的磁盘太小,所以切换到/data 目录下。 Jenkins目录、端口、工作目录等信息在/etc/sysconfig/jenkins 下,所以需要修改这个文件。 将JENKINS_HOME"/var/lib/jenkins&quo…

破一个行业ERP的感想
今天闲来无事,找来破一破。 这个是一个行业性质的ERP软件,有授权码验证,客户机数量限定,以及使用时间限定,被一一破解。 授权码存在明显的绕过bug.客户机数量同样被明文标注在文件中。使用时间也是标注在文件中&#x…

1034 Head of a Gang(图的DFS解法) 擦边大法好
1.题目的大意是给出很多人(结点)之间的通话记录,每两人之间的权重取决于他俩通话权重的总时长,如果一个社区的人数超过2且社区内发生的通话总时长超过给定阈值,那么这属于一个社区。最后要求输出社区的总数,再按照社区头目的姓名字…

Android定位方式和测试方法
Android常用的三种定位方式有:基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位: GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定…

vue el-form鼠标事件导致页面刷新解决方案;vue 阻止多次点击提交数据通用方法...
一.阻止表单自动提交刷新页面:<el-form><el-form-item :inline"true" submit.native.prevent><el-input keyup.enter.nativesubmit></el-input></el-form-item> </el-form>注意: 鼠标事件导致页面刷新问…

[转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库
wxODBC(wxWidgets)中使用驱动程序方式打开数据库 wxWidgets的文档中都是使用在控制面板/数据源中设定DSN来创建ODBC连接。但是实际上很多小型的应用,只是使用本机的一个Access数据库。而要求使用者学习ODBC的DSN配置明显的增加了软件的使用难度。因此,研…

1076 Forwards on Weibo
1. 这题说的是,微博上人们之间有关注和被关注的关系,如果一个人发博,他的追随者就可能转发,追随者的追随者又可能转发,以此类推。现在给定一个人,求其微博可能被转发的人数,但是注意有一个关注链…

2014年个人工作总结
2014年的日常工作,从技术支持岗位调到市场.社区岗位上:日常技术处理工作变为博客、微信、微博、市场活动策划、发送奖品等。如果以此为界:即毕业10年内的主要是软件研发、团队管理、项目管理;第二个十年开始,有幸从事市…

DAL(数据库访问层)
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Data.SqlClient;using System.Configuration; /// <summary>///DBHelper 的摘要说明/// </summary>public static class DBHelper{ public …

Navicat for Oracle
1、先解压Navicat for Oracle到任意目录 2、将instantclient-basic-nt-12.1.0.2.0解压到1中目录的instantclient_10_2文件夹下(推荐,可随意) 3、将instantclient-sqlplus-nt-12.1.0.2.0解压到instantclient_10_2文件夹中的 instantclient_12_…

1013 Battle Over Cities(图的DFS解法)
这题的背景是战争年代,假如城市1被占领,那么所有和城市1相关的公路都要被炸毁,但是这样一来,2和3就不连通了,所以需要补修一条23之间的公路。但是换做城市2或3被占领,1和另一座城市是联通的,并不…

你必须了解的微服务架构设计的10个要点!
近来,几乎人人都在谈论微服务。微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境等。本文将介绍微服务架构设计中的一些要点。 微服务架构设计时有哪些要点呢?先看下图是 Spring Cloud…

企业信息化中常见决策点应对
我和一位朋友在聊天的时候,谈起在甲方的做信息化,和在乙方做信息化的不同点在于,在甲方做信息化,需要搞定为什么要上一个项目。而乙方参与进来的时候,项目其实已经启动了。 是的,作为甲方的我们,…

WebView调试
https://developer.chrome.com/devtools/docs/remote-debugging 转载于:https://www.cnblogs.com/daishuguang/p/4194882.html

1013 Battle Over Cities(并查集解法)
关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一。我想着那么并查集就是数不算特定节点后,集合元素(根)的个数。但是我弄错了一件事,我是边输入,边合并,然后对于…

FastDFS为什么要结合Nginx?
为什么选择Nginx Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性: 在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢…

STL容器[34]
SERVER以读打开FIFO;CLIENT以写打开FIFO;SERVER关闭FIFO;CLIENT向当前FIFO写数据,此时CLIENT获得一个SIGPIPE信号。如果忽略该信号,那么write将返回-1,ERRNO为EPIPE向一个写打开,当对端已经关闭…

企业可视化报表工具选型经验分享
选型背景 我们是一家面向金融行业的系统集成商,每年要做十几个项目(看得出来我们并不大/笑哭),项目分大小、做事分先后,可不管怎样都绕不开数据,数据处理经常占项目的大头,所以经常会选择一些市…

1003 Emergency(Dijkstra,Bellman-Ford,SPFA三种解法)
目录 1. Dijkstra解法 2. Bellman-Ford解法 3. SPFA解法 4. Dijkstra解法AC代码 5. Bellman-Ford解法AC代码 6. SPFA解法AC代码 1. Dijkstra解法 这题不仅涉及到基础的解法,还涉及到第二标准(累计军队数量),以及还要记录最短路径条数。这些都是在…

存储过程4-前台
代码 ALTERproc[dbo].[P_CheckCode](retintoutput,nIdint,tagnvarchar(50),cCodenvarchar(50),nHotelIdint)asbeginifUpper(tag)B_AREAbeginifexists(select1fromB_Area wherecCodecCodeandnHotelIdnHotelIdandnId<>nId) setret1elsesetret-1endelseifUpper(t…

安卓学习-其他-文件读写
在android中的文件放在不同位置,它们的读取方式也有一些不同。 本文对android中对资源文件的读取、数据区文件的读取、SD卡文件的读取及RandomAccessFile的方式和方法进行了整理。供参考。 一、资源文件的读取: 1) 从resource的raw中读取文件数据&#x…