<题目链接>

题目大意:

有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况则不安排房间。输出最大需要安排房间的数量。

解题分析:
其实题意就是叫我们先判断该图是否为二分图,如果是的话,给出它的最大匹配。判断是否是二分图,我们可以用BFS或DFS对每个节点进行染色,有直接认识关系的人染成不同颜色,判断再染色的过程中是否发生冲突。最后再用匈牙利求出最大匹配。

 #include <cstdio>
 #include <cstring>
 #include <queue>
 #include <algorithm>
 using namespace std;

 ;
 bool g[N][N],vis[N];
 int n,m,ans,linker[N];
 bool bfs(){    //用bfs染色法判断该图是否是二分图
     queue<int>q;
     bool tag[N];
     memset(vis,false,sizeof(vis));
     q.push();     //先从任意一点开始染色
     tag[]=vis[]=true;
     while(!q.empty()){
         int now=q.front();q.pop();
         ;i<=n;i++){
             if(g[now][i]&&i!=now){
                 if(vis[i]){
                     if(tag[now]==tag[i])return false;    //如果相连的其它节点已经染色,且染的颜色与当前颜色相同,则说明该图不是二分图
                 }else{
                     tag[i]=!tag[now];    //相连的节点染不同的颜色
                     q.push(i);
                     vis[i]=true;
                 }
             }
         }
     }
     return true;
 }
 bool dfs(int x){
     ;i<=n;i++){
         if(g[x][i]&&!vis[i]){
             vis[i]=true;
             if(!linker[i]||dfs(linker[i])){
                 linker[i]=x;
                 return true;
             }
         }
     }
     return false;
 }
 int main(){
     while(scanf("%d%d",&n,&m)!=EOF){
         memset(g,,sizeof(g));
         memset(linker,,sizeof(linker));
         while(m--){
             int u,v;scanf("%d%d",&u,&v);
             g[u][v]=true;
         }
         if(bfs()){    //该图是二分图
             ans=;
             ;i<=n;i++){     //求出该图的最大匹配
                 memset(vis,,sizeof(vis));
                 if(dfs(i))ans++;
             }
             printf("%d\n",ans);
         }else puts("No");
     }
     ;
 }

2018-11-11

HDU 2444 二分图判断 (BFS染色)+【匈牙利】的更多相关文章

  1. hdu 2444 二分图判断与最大匹配

    题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No ...

  2. HDU - 2444 二分图最大匹配 之 判断二分图+匈牙利算法

    题意:第一行给出数字n个学生,m条关系,关系表示a与b认识,判断给定数据是否可以构成二分图,如果可以,要两个互相认识的人住一个房间,问最大匹配数(也就是房间需要的最小数量) 思路:要看是否可以构成二分 ...

  3. hdu 2444(二分图) The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 大意是给定n个学生,他们之间可能互相认识,首先判断能不能将这些学生分为两组,使组内学生不认识: 现想将学生 ...

  4. The Accomodation of Students HDU - 2444 二分图判定 + 二分图最大匹配 即二分图-安排房间

    /*655.二分图-安排房间 (10分)C时间限制:3000 毫秒 |  C内存限制:3000 Kb题目内容: 有一群学生,他们之间有的认识有的不认识.现在要求把学生分成2组,其中同一个组的人相互不认 ...

  5. 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...

  6. hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS     Me ...

  7. HDU 2444 The Accomodation of Students(判断是否可图 + 二分图)

    题目大意:有一群人他们有一些关系,比如A认识B, B认识C, 但是这并不意味值A和C认识.现在给你所有互相认识的学生,你的任务是把所有的学生分成两个一组, 住在一个双人房里.相互认识的同学可以住在一个 ...

  8. HDU 2444 The Accomodation of Students二分图判定和匈牙利算法

    本题就是先推断能否够组成二分图,然后用匈牙利算法求出最大匹配. 究竟怎样学习一种新算法呢? 我也不知道什么方法是最佳的了,由于看书本和大牛们写的匈牙利算法具体分析,看了几乎相同两个小时没看懂,最后自己 ...

  9. HDU 2444:The Accomodation of Students(二分图判定+匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:给出边,判断这个是否是一个二分图,并求最大匹配. 思路:先染色法求出是否是一个二分图,然后再匈牙利求 ...

随机推荐

  1. 机器学习之SVD分解

    一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...

  2. winform无需安装pdf阅读器打开pdf文件

    控件来源:http://www.o2sol.com/pdfview4net/download.htm (使用版本:2016年8月31号更新版) 备份链接: https://pan.baidu.com/ ...

  3. usrp使用

    首先打开linux 输入uhd_find_divice gqrx

  4. IE11总是有缓存的问题

    F12,里面选择网络,始终从服务器刷新..

  5. redis-4.0.8 配置文件解读

    # Redis configuration file example.## Note that in order to read the configuration file, Redis must ...

  6. Python基础之关于表达式

    初识表达式: 优雅.清晰和务实是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新 的列表时可以使用列表解析(List comprehensions)和生成表达式 ...

  7. 插件使用一颜色选择器---cxColor

    cxColor 是一款颜色选择器.这样的插件使用场景不多.可喜的这是国人写的. 官方网站: https://github.com/ciaoca/cxColor 使用方法: 1.引入jquery库 1 ...

  8. 去掉A标签的点击选中边框

    非IE a:focus { outline:none; }

  9. python网络爬虫day1

    python爬虫真的很方便,自己不能忽视的问题就是字符编码的问题,一直想腾出时间来看,一直没有时间.明天开始看吧. 今天是学习python爬虫的第一天,从B站上搜到的,可惜可惜. import req ...

  10. Summary of continuous function spaces

    In general differential calculus, we have learned the definitions of function continuity, such as fu ...