zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L3-003 社交集群 (30分)(并查集)

    题目链接:

    L3-003 社交集群 (30分)

    思路:

    对于每个爱好我们存一个代表人物进去,然后遇到其它有这个爱好的人就使用并查集将它们合并起来;

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 1005;
    int n, par[maxn], a[maxn];
    inline void init_set() { for(int i = 1; i < maxn; i++) par[i] = i; }
    inline int find(int a) {
    	if(a == par[a]) return a;
    	return par[a] = find(par[a]);
    }
    inline void unite(int a, int b) { par[find(a)] = find(b); }
    
    int main() {
    #ifdef MyTest
    	freopen("Sakura.txt", "r", stdin);
    #endif
    	init_set();
    	scanf("%d", &n);
    	for(int i = 1; i <= n; i++) {
    		int k, h;
    		for(scanf("%d:", &k); k--;) {
    			scanf("%d", &h);
    			if(a[h]) unite(i, a[h]);
    			else a[h] = i;
    		}
    	}
    	map<int, int> cnt;
    	for(int i = 1; i <= n; i++) ++cnt[find(i)];
    	vector<int> v;
    	for(auto & x : cnt) v.push_back(x.second);
    	sort(v.begin(), v.end(), greater<int>());
    	cout << v.size() << '
    ' << v[0];
    	for(int i = 1; i < v.size(); i++) cout << ' ' << v[i];
    	return 0;
    }
    
  • 相关阅读:
    hadoop wordcount
    hadoop map reduce 实例wordcount的使用
    玉髓
    数据类型检测的四种方式
    天猫前端招聘要求
    正则示例1
    字面量和实例创建的区别
    正则表达式
    面试题1
    this关键字
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308633.html
Copyright © 2011-2022 走看看