题目链接:点击查看

题目大意:给出n个学生,他们之间有m个认识关系,但认识关系不具有传递性,比如A认识B,B认识C,A不一定认识C,现在给出认识关系,先判断是否能够将所有学生分为两个集合A和B中去,集合A中的所有学生都互不认识,集合B中的学生也互不认识,集合A中的学生可以和集合B中的学生认识,若能分成两个集合,问最多有几个认识的关系

题目分析:看完题后再看了一眼样例,就是个模板题,二分图的判断我们交叉染色即可判断,分成两个集合后用匈牙利跑一下最大匹配就行了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;vector<int>node[N];int n,m;bool maze[N][N];int match[N];bool vis[N];int color[N];bool dfs1(int u,int f,int c)//交叉染色法
{color[u]=c;for(auto v:node[u]){if(v==f)continue;if(color[v]==-1&&!dfs1(v,u,!c))return false;else if(color[v]!=-1&&color[v]==c)return false;}return true;
}bool dfs(int x)//匈牙利算法
{for(int i=1;i<=n;i++){if(maze[x][i]&&!vis[i]){vis[i]=true;if(!match[i]||dfs(match[i])){match[i]=x;return true;}}}return false;
}void init()
{for(int i=1;i<=n;i++)node[i].clear();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)maze[i][j]=false;memset(match,0,sizeof(match));memset(color,-1,sizeof(color));
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);while(scanf("%d%d",&n,&m)!=EOF){init();while(m--){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);maze[u][v]=true;}if(!dfs1(1,0,0)){printf("No\n");continue;}int ans=0;for(int i=1;i<=n;i++){memset(vis,false,sizeof(vis));if(dfs(i))ans++;}printf("%d\n",ans);}return 0;
}

HDU - 2444 The Accomodation of Students(二分图判断+二分图最大匹配)相关推荐

  1. HDU 2444 The Accomodation of Students 二分图匹配

    HDU 2444 The Accomodation of Students 二分图匹配 题目来源: HDU 题意: 给出学生数n和关系数m,接下来给出m个关系. 要求将学生分成两部分,每一部分不能有互 ...

  2. HDU 2444 The Accomodation of Students (二部图+染色)

    The Accomodation of Students Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Ja ...

  3. HDU——2444 The Accomodation of Students

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  4. HDU - 2444——The Accomodation of Students(判断二分图,二分图最大匹配)

    题意: 题意: 有n个人,m对人相互认识: 问能否分成两个组,组内任意两个人之间不认识: 若不能,则输出No: 若能,则相互认识的两个人一间房,求最多需要几间房: 给出一些学生的认识情况,比如A和B认 ...

  5. HDU 2444 The Accomodation of Students

    首先是要构造二分图,然后二分图的最大匹配. 还有没完全证明过我的方法的正确性,但是AC了..... #include<cstdio> #include<cstring> #in ...

  6. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

    题干: There are a group of students. Some of them may know each other, while others don't. For example ...

  7. HDU 5971 2016ICPC大连 A: Wrestling Match(二分图判断)

    题意:这题难在题意.. 因为题面太尴尬了所以直接转了吧,据说很多写法都能过 有n个点m条边的图,已知有x个点是黄色的,y个点是红色的(最后的x+y行输入的是这些点的编号) 问是否能将这个图转化成二分图 ...

  8. 二分图判断以及二分图最大匹配

    概念 二分图又称作二部图 ,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...

  9. 二分图判断(交叉染色)

    二分图又称二部图. 二分图是无向图. 设G=(V,E)是一个无向图.如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集. 例如这就是一个二分图. 大概就是把顶点分成 ...

最新文章

  1. 一男子蒙冤入狱 10 天,竟是 AI 认错了!
  2. 在Python中的无参装饰器和有参装饰器
  3. android xml解析的三种方式
  4. 配置 aws cli_AWS CLI教程–如何安装,配置和使用AWS CLI了解您的资源环境
  5. 神仙在双11晚上,都干了些啥?
  6. 转转集团二手双11大促:长沙用户“秒杀”99新iPhone12成首单
  7. QML如何与C++交互
  8. 应用程序范围的键值对
  9. 浅分享一下zzulioj刷题总结
  10. 人大金仓数据库迁移步骤
  11. 8款逆天的在线实用工具
  12. 个人如何购买腾讯云服务器
  13. python多线程爬取美图录网站图集按模特姓名存储到本地(一)
  14. 从零搭建符合自己需求的开发环境
  15. 表观转录组学-m6A简介
  16. 二、什么是反射、反射可以做些什么
  17. 以太坊(一)——概述
  18. 第四次c语言实验报告模板,C语言实验报告模板完成版
  19. Python学习-批量提取图片名称保存至txt文件
  20. 2017 ICPC 乌鲁木齐

热门文章

  1. MySQL删除环境变量配置
  2. 共享数据库、共享数据表
  3. RocketMQ为什么速度快
  4. Condition总结-CountDownLatch源码分析
  5. MyBatis 源码解读-settingsElement(settings)
  6. MyBatis 实际使用案例-核心配置解读
  7. 基于Redis优化购物车 - 添加商品
  8. JDK API实践:Spring怎样取舍Java I-O、集合、反射、动态代理等API的使用
  9. RequestMapping注解的作用
  10. mybatis的二级缓存