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 过山车(二分图最佳匹配)
经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...
随机推荐
- 远程终端协议 TELNET
远程终端协议 TELNET 1.1.概述 TELNET 是一个简单的远程终端协议,也是因特网的正式标准. 用户用 TELNET 就可在其所在地通过 TCP 连接的23端口,使用主机名或 IP 地址登录 ...
- nvm安装以及注意事项
nvm初衷:由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理 1. 下载:[nvm-windows](https://github.com/cor ...
- git工作中常用操作总结
这篇文章主要记录下工作中常用的git操作.主要是对之前文章记录的问题做个总结,这个其实在idea中操作更加简单 别名配置 在敲git 命令时,其实可以使用别名,比如 commit可以配置为ci 下面是 ...
- 前端每日实战:147# 视频演示如何用纯 CSS 创作透视按钮的悬停特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qJEdKb 可交互视频 此视频是可 ...
- FC及BFC
1.什么是FC 2.BFC块级格式化上下文(Block formatting context) Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类 ...
- Deepin环境下启动Pycharm没有启动图标解决办法
小伙伴们在deepin下运行pycharm时,是不是需要通过sh文件启动? 下面告诉大家如何将pycharm图标放在桌面上: 1.在桌面打开终端,输入命令: sudo gedit /usr/share ...
- 安装docker,docker-compose,Harbor
一.docker安装 1.删除旧版本和相关依赖 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ d ...
- iPhone UIButton图标与文字间距设置【转】
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 150, 50)]; [button setTitle:@& ...
- xadmin安装和配置
1.在虚拟环境pip install xadmin 2.安装完成之后在settings.py的install app里面添加xadmin和crispy_forms 3.在主项目url里面把原来的adm ...
- ADO.NET连接数据库DBHelper工具类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...