L3-003. 社交集群

在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。

输入格式:

输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号)。随后N行,每行按下列格式列出每个人的兴趣爱好:

Ki: hi[1] hi[2] ... hi[Ki]

其中Ki(>0)是第i个人的兴趣的数量,hi[j]是第i个人的第j项兴趣的编号,编号范围为[1, 1000]内的整数。

输出格式:

首先在第一行输出整个网络中集群的数量,然后在第二行按非递增的顺序输出每个集群中用户的数量。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

8
3: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4

输出样例:

3
4 3 1

并查集 每次对有某一个爱好所有人扫一遍 有相同的就并一下,最后检查  输出。

代码:
#include <iostream>
#include <map>
#include <queue>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Max 1001

using namespace std;

int mp[Max][Max];
int n;
int f[Max],num[Max];
int *p[Max],c;
bool cmp(int *a,int *b)
{
    return *a > *b;
}
void init()///初始化
{
    for(int i = 1;i <= n;i ++)
        f[i] = i;
}
int getf(int x)///寻找父亲
{
    if(f[x] != x)return getf(f[x]);
    return x;
}
void marriage(int x,int y)///合并
{
    int xx = getf(x);
    int yy = getf(y);
    f[yy] = xx;
}
int main()
{
    int k,d;
    cin>>n;
    init();
    for(int i = 1;i <= n;i ++)
    {
        cin>>k;
        cin.get();///读取 ‘:‘
        while(k --)
        {
            cin>>d;///每个d都扫一遍
            for(int j = 1;j <= n;j ++)
                if(mp[j][d])marriage(j,i);
            mp[i][d] = 1;
        }
    }
    for(int i = 1;i <= n;i ++)
    {
        d = getf(i);
        if(d == i)p[c ++] = &num[i];///如果父亲是自己就加入p序列 num记录每个群体个数
        num[d] ++;///计算个数
    }
    sort(p,p+c,cmp);
    cout<<c<<endl<<*p[0];
    for(int i = 1;i < c;i ++)
        cout<<‘ ‘<<*p[i];
}
时间: 2024-11-10 14:57:10

L3-003. 社交集群的相关文章

天梯赛 L3-003. 社交集群

并查集,以人为节点,用set来存每个人的兴趣,输入第i个人的兴趣时,如果在前i个人的兴趣里找得到,就将两个人合并. 1 #include<iostream> 2 #include<string> 3 #include<stdio.h> 4 #include<string.h> 5 #include<algorithm> 6 #include<set> 7 #include<queue> 8 #include<map&

wordcount编写和提交集群运行问题解决方案

在win7测试Wordcount遇到的问题,解决过程 hadoop jar /root/wc1.jar cn.itcast.d3.hadoop.mr.WordCount hdfs://itcast:9000/words /out2 执行上面一句话时候报错: Unsupported major.minor version 52.0 这种错误的原因是jdk版本不一样导致的,我的win7是jdk1.8,hadoop是jdk1.7, 解决方案: 修改项目java compiler的方法: 在项目点右键-

天梯L3-003. 社交集群——并查集

在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友.有部分兴趣相同的人们就形成了"社交集群".现请你编写程序,找出所有的集群. 输入格式: 输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号).随后N行,每行按下列格式列出每个人的兴趣爱好: Ki: hi[1] hi[2] ... hi[Ki] 其中Ki(>0)是第i个人的兴趣的数量,hi[j]是第i个人的第j项兴趣的编号,编号范围为[1, 1000]内的整数.

Spark3000门徒第9课IDEA中开发Spark实战总结

今晚听了王家林老师的第9课IDEA中开发Spark实战,课后作业是:在Idea中编写广告点击排名的程序并提交集群测试, IDEA社区版本就够用,Ultimate没必要还要钱 程序如下: object WordCountCluster { def main(args: Array[String]){ /** * 第一步:创建spark的配置对象SparkConf,设置Spark程序的运行时的配置信息 * */ val conf = new SparkConf() //创建SparkConf对象 c

SparkConf加载与SparkContext创建(源码)

即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从代码层面,我们可以看到我们需要setMaster啊,setAppName啊,set blabla啊...等等~ val sparkConf = new SparkConf().setMaster("local").setAppName("TopActiveLocations&qu

storm的八种Grouping策略

在这里,将会提到storm的七种grouping策略,并且编码逐一实现. 首先,需要一个集群(希望尽量模仿真实环境,故就不用本地模式了).详细的安装方法大家可以查看本人的另外一篇博文:storm集群和zookeeper集群的部署过程. OK.现在有三个节点.一个作为nimbus,两个作为supervisor.到这里先介绍一下storm逻辑上有两个component,一个是Spout,另一个是Bolt.stream由Spout发出,在不同的Bolt之间进行处理,在其中传递的是storm的基本处理单

MAPREDUCE实践篇

1.编程规范 (1)用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端) (2)Mapper的输入数据是KV对的形式(KV的类型可自定义) (3)Mapper的输出数据是KV对的形式(KV的类型可自定义) (4)Mapper中的业务逻辑写在map()方法中 (5)map()方法(maptask进程)对每一个<K,V>调用一次 (6)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV (7)Reducer的业务逻辑写在reduce(

spark transformation与action操作函数

一.Transformation map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成 filter(func) 返回一个新的数据集,经过fun函数处理后返回值为true的原元素组成 flatMap(func) 类似于map,但每个输入元素会被映射为0个或多个输出元素 mapPartitions(func)  类似于map,对RDD的每个分区起作用 intersection(otherDataset) 求两个RDD的交集 distinct([numTasks])

spark本地运行模式

Spark设置setMaster=local,不提交集群,在本地启用多线程模拟运行 object SparkUtil {      private val logger = Logger.getLogger(getClass.getName, true)      def getSparkContext(appName:String, local:Boolean=false, threadNum:Int=4):SparkContext = {            val conf = new