HDU - 2444 二分图最大匹配 之 判断二分图+匈牙利算法
题意:第一行给出数字n个学生,m条关系,关系表示a与b认识,判断给定数据是否可以构成二分图,如果可以,要两个互相认识的人住一个房间,问最大匹配数(也就是房间需要的最小数量)
思路:要看是否可以构成二分图,就是二分图的判断,这里主要记录一下自己想的判断方法:用一个数组记录分类,0表示这个人没有被分类,1,2表示二分图两个部分,边输入边判断是否是二分图,如果两个人都是0,那么将这两个人分别赋值1,2即可,若两人数值不相同,但有一个为0,将为零的这个赋值1或2,,若两人值相等且不为0,说明矛盾了,flag=1。分出两个不同的1,2两组后,套模板即可。(网上用广搜判断)
#include<queue>
#include<stdio.h>
#include<string.h>
#include<iostream>
#define N 220
using namespace std;
int book[N],n,m,e[N][N],L[N];
bool dfs(int u)
{
for(int i=1; i<=n; i++)
{
if(!book[i]&&e[u][i])//如果没有被连过并且可以连
{
book[i]=1;//标记一下,协助寻找增广路(找数据代入一遍就明白了)
if(dfs(L[i])||L[i]==0)//寻找增广路
{
L[i]=u;//记录路径
return 1;
}
}
}
return 0;
}
bool bfs()
{
//相当于染色,e[v][i]的v和i不能是相同颜色
//0 1两种颜色,如果遇到已经染过颜色的,并且相同,就false
int judge[220];
memset(judge,-1,sizeof(judge));
queue<int> q;
q.push(1);
judge[1]=0;
while(!q.empty())
{
int v=q.front();
q.pop();
for(int i=1;i<=n;++i)
{
if(e[v][i])
{
if(judge[i]==-1)
{
judge[i]=(judge[v]+1)%2;
q.push(i);
}
else
{
if(judge[i]==judge[v])
return false;
}
}
}
}
return true;
}
int main()
{
int a[220],x[220],y[220],t1,t2;
while(~scanf("%d%d",&n,&m))
{
for(int i=1; i<=n; i++)
{
a[i]=0;
for(int j=1; j<=n; j++)
e[i][j]=e[j][i]=0;
}
int flag=0;
/* 以下二分图的判断 */
for(int i=1; i<=m; i++)
{
scanf("%d%d",&t1,&t2);
e[t1][t2]=e[t2][t1]=1;
x[i]=t1,y[i]=t2;
if(a[t1]==a[t2]&&a[t1]==0)
a[t1]=1,a[t2]=2;
else if(a[t1]!=a[t2]&&a[t1]==0)
{
if(a[t2]==2)
a[t1]=1;
else a[t1]=2;
}
else if(a[t1]!=a[t2]&&a[t2]==0)
{
if(a[t1]==2)
a[t2]=1;
else a[t2]=2;
}
else if(a[t1]==a[t2])
flag=1;
}
/*以上 二分图的判断*/
if(flag)
printf("No\n");
else
{
memset(L,0,sizeof(L));
int sum=0;
for(int i=1; i<=n; i++)
{
memset(book,0,sizeof(book));
if(dfs(i)&&a[i]==1)//注意条件!!!
sum++;
}
printf("%d\n",sum);
}
}
return 0;
}
HDU - 2444 二分图最大匹配 之 判断二分图+匈牙利算法的更多相关文章
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
- HDU 2444 The Accomodation of Students 二分图判定+最大匹配
题目来源:HDU 2444 The Accomodation of Students 题意:n个人能否够分成2组 每组的人不能相互认识 就是二分图判定 能够分成2组 每组选一个2个人认识能够去一个双人 ...
- HDU 2444 The Accomodation of Students二分图判定和匈牙利算法
本题就是先推断能否够组成二分图,然后用匈牙利算法求出最大匹配. 究竟怎样学习一种新算法呢? 我也不知道什么方法是最佳的了,由于看书本和大牛们写的匈牙利算法具体分析,看了几乎相同两个小时没看懂,最后自己 ...
- 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, A ...
- hdu 3605 Escape 二分图的多重匹配(匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others) ...
- B - The Accomodation of Students - hdu 2444(最大匹配)
题意:现在有一些学生给你一下朋友关系(不遵守朋友的朋友也是朋友),先确认能不能把这些人分成两组(组内的人要相互不认识),不能分的话输出No(小写的‘o’ - -,写成了大写的WA一次),能分的话,在求 ...
- HDU_2255 二分图最佳完美匹配 KM匈牙利算法
一开始还没看懂这个算法,后来看了陶叔去年的PPT的实例演示才弄懂 用一个lx[]和ly[]来记录X和Y集合中点的权值,有个定理是 lx[i]+ly[j]==w[i][j](边权值) 则该点是最佳匹配, ...
- 【模板】二分图最大匹配(匈牙利算法)/洛谷P3386
题目链接 https://www.luogu.com.cn/problem/P3386 题目大意 给定一个二分图,其左部点的个数为 \(n\),右部点的个数为 \(m\),边数为 \(e\),求其最大 ...
- hdu 2063 过山车(二分图最佳匹配)
经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...
随机推荐
- shell 获取字符创长度&&识别当前使用的shell&&检查是否为超级用户
1.获得字符串长度 可以使用下面的方法获得变量值得长度: length=${#value} 例如: [root@gameserver1 shell]# var=12345678 [root@games ...
- SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- 全网最详细的一篇Flutter 尺寸限制类容器总结
Flutter中尺寸限制类容器组件包括ConstrainedBox.UnconstrainedBox.SizedBox.AspectRatio.FractionallySizedBox.Limited ...
- 从web现状谈及前端性能优化
从web现状谈及性能优化 原文出处:<Karolina Szczur: The State of the Web> 性能优化指南The Internet is growing expone ...
- 学习Vue.js-Day2
书接上文/思考反馈 react,ng,vue作用差不多,那各个都有什么特点啊,实际工作中应该用哪一个? 答:其实在实际工作中,组员会通过讨论而选择框架:这三个框架都能解放你的工作量,也适合做单页面应用 ...
- TCP/IP协议概要--01
学习一下tcp/ip协议,还是很枯燥,哎..... 图片的是从下到上对TCP/IP的协议进行描述的.主要是的描述每一层协议的特点 该层对应的是最底层的数据链路层,即图中的以太网驱动程序那一层. 该层是 ...
- Python - 字符串格式化详解(%、format)
Python在字符串格式化的两种方式 % format %,关于整数的输出 %o:oct 八进制%d:dec 十进制%x:hex 十六进制 print("整数:%d,%d,%d" ...
- href="#"和href=“javascript:void(0)”的区别
void是javascript中的关键字,该操作符指定要计算一个表达式但是不返回值. <a href="javascript:void(0);">点我没有反应的!< ...
- Json转化的三种方式
1. Gson 1.添加依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId ...
- JS反爬绕过思路之--谷歌学术镜像网链接抓取
首先,从问题出发: http://ac.scmor.com/ 在谷歌学术镜像网收集着多个谷歌镜像的链接.我们目标就是要把这些链接拿到手. F12查看源码可以发现,对应的a标签并不是我们想要的链接,而是 ...