zoukankan      html  css  js  c++  java
  • L2-2 社交集群 (25 分)(一个写挫的并查集)

    题目:

    思路:

    就是一个并查集的裸题,不过在数据查找方面可能不好处理,暴力完全可以解决这个问题啊!!

    #include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <iomanip>
    #define MOD 998244353
    #define MAX 1000000000
    #define inf 0x3f3f3f3f3f3f3f3f
    #define FRE() freopen("in.txt","r",stdin)
    
    using namespace std;
    typedef long long ll;
    const int maxn = 2010;
    int fa[maxn],vis[maxn];
    
    void init()
    {
        for(int i=0; i<maxn; i++)
        {
            fa[i] = i;
            vis[i] = 1;
        }
    }
    
    int _find(int x)
    {
        return fa[x]==x ? x : fa[x] = _find(fa[x]);
    }
    
    void _union(int x,int y)
    {
        int tx = _find(x);
        int ty = _find(y);
        if(tx!=ty)
        {
            fa[ty] = tx;
            vis[tx] += vis[ty];//更新这个社交集群中的人数
        }
        return;
    }
    
    int main()
    {
        init();
        vector<set<int> > vc;
        int n,k,x;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            set<int> st;
            scanf("%d:" ,&k);
            for(int j=0; j<k; j++)
            {
                scanf("%d",&x);
                st.insert(x);
                for(int p=0; p<i; p++)//暴力查找有共同兴趣的人
                {
                    if(vc[p].count(x))//进行合并
                    {
                        _union(i,p);
                        break;
                    }
                }
            }
            vc.push_back(st);
        }
        vector<int> ans;
        for(int i=0; i<n; i++)
        {
            if(fa[i] == i)
            {
                ans.push_back(vis[i]);
            }
        }
        sort(ans.begin(),ans.end(),greater<int>() );
        printf("%d
    ",ans.size());
        for(int i=0; i<ans.size(); i++)
        {
            if(i) printf(" ");
            printf("%d",ans[i]);
        }
        return 0;
    }
    /*
    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
    */
  • 相关阅读:
    python常用模块
    清除在Windows下访问共享文件夹时的登录信息
    CentOS 6.3下Samba服务器的安装与配置
    textarea定位光标
    js中apply方法的使用
    js call方法
    linux 安装svn,并设置钩子来同步更新
    mysql给root开启远程访问权限,修改root密码
    在VMware的Linux系统上安装Redis
    (转)NoSQL——Redis在win7下安装配置的学习一
  • 原文地址:https://www.cnblogs.com/sykline/p/10613522.html
Copyright © 2011-2022 走看看