zoukankan      html  css  js  c++  java
  • 小花梨判连通 (bfs+思维+map统计数量)

    如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 

    学到的点:用map,将vector映射一个整数时,只有vector后面的邻接的数据都一样时,才认为两个vector一样

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    #include<vector>
    #include<cmath>
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    vector<int>Map[maxn];
    vector<int>Color[maxn];
    int n,k;
    map<vector<int>,int>mp;
    int vis[maxn];
    int cnt;
    void bfs(int x)
    {
        vis[x]=1;
        Color[x].push_back(cnt);
        for(int t=0;t<Map[x].size();t++)
        {
            if(vis[Map[x][t]]==0)
            {
               bfs(Map[x][t]);
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int t=0;t<k;t++)
        {
            int x;
            scanf("%d",&x);
            for(int t=1;t<=n;t++)
            {
                Map[t].clear();
                vis[t]=0;
            }
            for(int j=0;j<x;j++)
            {
                int u,v;
                scanf("%d%d",&u,&v);
                Map[u].push_back(v);
                Map[v].push_back(u);
            }
            cnt=0;
            for(int t=1;t<=n;t++)
            {
                if(vis[t]==0)
                {
                    cnt++;
                    bfs(t);
                }
            }
            
            
        }
        for(int t=1;t<=n;t++)
        {
            mp[Color[t]]++; //如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 
        }
        for(int t=1;t<=n;t++)
        {
            printf("%d
    ",mp[Color[t]]);
        }
    
        return 0;
    }
  • 相关阅读:
    2017加油
    配置SSH框架的心得
    .net 中select和where的区别
    oracle查询中文数据出现乱码
    three.js 加载 obj模型
    下载别人的3D模型文件
    关闭按钮
    桌面截屏保存成gif形式(软件)
    vue 中引入 three.js
    three.js-地球贴图-TextureLoader
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10887348.html
Copyright © 2011-2022 走看看