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
    */
  • 相关阅读:
    页面布局方案-上固定,下自适应
    页面布局方案-左右固定,中间自适应
    身心疲惫
    生产计划拆分说明-班组绩效匹配算法
    CSS代码片段
    常见内部函数----Python
    pyramid的第一个项目
    2015年大连国际马拉松半程经历
    高效时间管理
    《番茄工作法图解》第四章读书笔记
  • 原文地址:https://www.cnblogs.com/sykline/p/10613522.html
Copyright © 2011-2022 走看看