#include <iostream>
#include <algorithm>
#include <vector>
#include<set>
#include<cmath>
#include<iomanip>
using namespace std;
#define STP system("pause")
#pragma warning(disable:4996)
vector<set<int>> v;
vector<int>v_cnt;
int main()
{
int M,N,index;
cin >> M;
vector<int>s_t;
for (int i = 0; i < M; i++)
{
scanf("%d:", &N);
set<int>s;
int time = 1;
for (int j = 0; j < N; j++)//获得所有的元素
{
scanf("%d", &index);
s.insert(index);
}
set<int>s_temp;
for (auto m:s) {
for (int t = 0; t < v.size(); t++)
{
if (find(v[t].begin(),v[t].end(),m)!=v[t].end())//找到了一个值
{
s_temp.insert(v[t].begin(), v[t].end());
v[t].clear();
s_t.push_back(t);
time+=v_cnt[t];
break;//在一行找到,就不会在接下来的几行中找到
}
}
}
v_cnt.push_back(time);
s.insert(s_temp.begin(), s_temp.end());
v.push_back(s);
}
int cnt = 0;
for (int i = 0; i < v.size(); i++)
{
if (!v[i].empty())
{
cnt++;
}
}
cout << cnt << endl;
vector<int> v_sort;
for (int i= v_cnt.size()-1;i>=0;i--)
{
if (find(s_t.begin(), s_t.end(), i) == s_t.end())
{
/*cout << v_cnt[i];
if (i != 0)
cout << " ";*/
v_sort.push_back(v_cnt[i]);
}
}
sort(v_sort.begin(), v_sort.end(), greater<int>());
for (int i = 0; i < v_sort.size(); i++)
{
cout << v_sort[i];
if (i != v_sort.size()-1)
cout << " ";
}
STP;
return 0;
}
1107 Social Clusters(30 分)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 明显是并查集的问题,但是一开始不知道怎么合并,参考的《算法笔记》的答案,每次碰到一个爱好,就给这个爱好设置为有这个...
- 在递归角度看,S0点下来走势为30级别aAb结构。W4W5为b段,其内部结构为aAbcd结构或者abcAd结构,目...