小花梨判连通 (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\n",mp[Color[t]]);
    }

    return 0;
}

原文地址:https://www.cnblogs.com/Staceyacm/p/10887348.html

时间: 2024-11-02 15:47:26

小花梨判连通 (bfs+思维+map统计数量)的相关文章

上海市高校大学生程序设计邀请赛 C:小花梨判连通

Problem C.小花梨判连通 时间限制:2000ms 空间限制:512MB Description 小花梨给出??个点,让??位同学对这??个点任意添加无向边,构成??张图.小花梨想知道对于 每个点??,存在多少个点??(包括??本身),使得??和??在这??张图中都是连通的. Input 第一行输入两个正整数??和??,分别表示点的个数和同学数. 接下来分成??部分进行输入,每部分输入格式相同. 每部分第一行输入一个整数????,表示第??位同学连边的数目. 接下来????行,每行两个正整

(判连通+暴力)UVA - 208 Firetruck

原题链接: 比较麻烦,就不挂,可以上uva live找,也可以用virtual judge挂题. 题意: 输出从1到k的所有路径,不能重复经过 分析: 这题就是简单的深搜回溯,用一个数组记录路径,满足条件时输出.紫书上说需要先判断1到k是否联通,不然会超时.交了一发直接深搜,果然TLE.所以需要先判连通. 判连通的方法有(能想到的): 1.dfs和bfs,两者感觉差不多,但是我选择的bfs 2.floyd,n^3的复杂度,但更加粗暴直接,也更好写 3.待添加 感悟: 不预先判连通3000ms超时

HDU 1317 XYZZY (SPFA 找正环 + Floyd 判连通)

XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3004    Accepted Submission(s): 817 Problem Description It has recently been discovered how to run open-source software on the Y-Crate gami

DFS/BFS+思维 HDOJ 5325 Crazy Bobo

题目传送门 1 /* 2 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 3 在树上的路径权值都小于这两个点 4 DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案.因为排序后,他们之间的路径, 5 可定都是从当前节点u连过去的,那么都是小于这两个节点的.DFS需手动加栈,BFS类似拓扑排序的思路 6 */ 7 #pragma comment (linker, "/STACK:1024000000,10240000

[无向图判连通]4.17平平凡凡才是真

因为下雨外加睡不醒所以这几天状态萎靡不振 决定开始刷题了,保持每天一道或者三天两道的进度吧 知识点随着刷题慢慢补吧 放弃爆炸oj了,蒟蒻的自我救赎 今天的题是[USACO16OPEN]关闭农场Closing the Farm 本蒟蒻的第一反应:强行spfa判连通 事实证明如果不是不知道哪里写错的玄学错误应该是能拿50分的 看了一下题解 思路大概是不考虑删点 从最后一个点开始加点判断连通与否 然后再倒着输出就好 要求:离线操作 具体实施:并查集 我和你连通,爸爸就一样 一旦出现两个或两个以上爸爸,

分享《贝叶斯思维:统计建模的Python学习法》高清中文版PDF+高清英文版PDF+源代码

下载:https://pan.baidu.com/s/1axiPTi3PkYcZhdkQAQidEg 更多资料分享:http://blog.51cto.com/3215120 <贝叶斯思维:统计建模的Python学习法>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,文字能够复制粘贴:高清英文版PDF,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图: 原文地址:http://blog.51cto.co

分享《贝叶斯思维:统计建模的Python学习法》+PDF+源码+Allen B.Downey+许杨毅

下载:https://pan.baidu.com/s/130Wf-CymOIW4ELlh9ihVlg 更多资料分享:http://blog.51cto.com/14087171 <贝叶斯思维:统计建模的Python学习法>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,文字能够复制粘贴:高清英文版PDF,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图: 原文地址:http://blog.51cto.c

深度分析如何在Hadoop中控制Map的数量

深度分析如何在Hadoop中控制Map的数量 [email protected] 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数决定.在默认情况下,最终input 占据了多少block,就应该启动多少个Mapper.如果输入的文件数量巨大,但是每个文件的size都小于HDFS的blockSize,那么会造成 启动的Mapper等于文件的数量(即每个文件都占据了一个block),那么很可能造成启动的Mapper数量超出限制而导致崩溃.这些逻

[LeetCode]小工具,统计数量,隐藏上锁的题目

LeetCode Problems List没有统计数量的功能,顺手写了一个. 下面两段只是用jquery调整网页上显示的内容,刷新网页就没用了. 比如想看题目里一共有多少Easy, Medium和Hard,就在浏览器Console中运行下面的代码. 还有一种用法,比如看还有多少没做,或者没做的题中有多少Easy, Medium和Hard,先选Unsolved Problems的filter,再用控制台运行该代码. 1 //Count Problems 2 var list = $("tbody