题意:第一行给出数字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 二分图最大匹配 之 判断二分图+匈牙利算法的更多相关文章

  1. HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...

  2. HDU 2444 The Accomodation of Students 二分图判定+最大匹配

    题目来源:HDU 2444 The Accomodation of Students 题意:n个人能否够分成2组 每组的人不能相互认识 就是二分图判定 能够分成2组 每组选一个2个人认识能够去一个双人 ...

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

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

  4. 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 ...

  5. hdu 3605 Escape 二分图的多重匹配(匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others)    ...

  6. B - The Accomodation of Students - hdu 2444(最大匹配)

    题意:现在有一些学生给你一下朋友关系(不遵守朋友的朋友也是朋友),先确认能不能把这些人分成两组(组内的人要相互不认识),不能分的话输出No(小写的‘o’ - -,写成了大写的WA一次),能分的话,在求 ...

  7. HDU_2255 二分图最佳完美匹配 KM匈牙利算法

    一开始还没看懂这个算法,后来看了陶叔去年的PPT的实例演示才弄懂 用一个lx[]和ly[]来记录X和Y集合中点的权值,有个定理是 lx[i]+ly[j]==w[i][j](边权值) 则该点是最佳匹配, ...

  8. 【模板】二分图最大匹配(匈牙利算法)/洛谷P3386

    题目链接 https://www.luogu.com.cn/problem/P3386 题目大意 给定一个二分图,其左部点的个数为 \(n\),右部点的个数为 \(m\),边数为 \(e\),求其最大 ...

  9. hdu 2063 过山车(二分图最佳匹配)

    经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...

随机推荐

  1. java 初探-猜数字

    学习Java而编写的猜数字的程序代码. /** * */ package org.literal.test; import java.util.Scanner; /** * @author liter ...

  2. 查询mysql版本号

    mysql> select version(); +------------+| version() |+------------+| 5.7.23-log |+------------+1 r ...

  3. czC#01

    1. .net简介: .net分为.net平台及.net Framework 2..NET作用 2.转义与@ 3.类型转换 1) 隐式转换 2)显式类型转换 (待转换的目标类型)原始值

  4. fsLayuiPlugin多数据表格使用

    fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...

  5. [LeetCode] 1103. Distribute Candies to People 分糖果

    题目: 思路: 本题一开始的思路就是按照流程一步步分下去,算是暴力方法,在官方题解中有利用等差数列进行计算的 这里只记录一下自己的暴力解题方式 只考虑每次分配的糖果数,分配的糖果数为1,2,3,4,5 ...

  6. .NET Core 获取主机运行资源的库

    简介 CZGL.SystemInfo 是一个支持 Windows 和 Linux 的资源信息获取库,用于获取系统环境.机器资源信息.系统资源使用情况. Nuget 搜索 CZGL.SystemInfo ...

  7. 细说集群技术(Cluster)

    今天本人给大家讲解一些我对集群技术一个理解,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 集群(Cluster)技术:通过此可以用较低的成本获取较高的性能 ...

  8. 无损卡尔曼滤波UKF(3)-预测-生成Sigma点

    无损卡尔曼滤波UKF(3)-预测-生成Sigma点 1 选择创建Sigma点 A 根据 已知上一个时间戳迭代出来的 后验状态 x_{k|k} 和后验协方差矩阵 P_{k|k} 他们代表当前状态的分布. ...

  9. windows 安装 jenkins 自动化构建部署至linux服务器上

    一.环境准备 1.git安装环境 参考链接 https://www.cnblogs.com/yuarvin/p/12500038.html 2.maven安装环境,包括jdk环境安装 参考链接 htt ...

  10. 3L-最好、最坏、平均、均摊时间复杂度

    关注公众号 MageByte,设置星标点「在看」是我们创造好文的动力.后台回复 "加群" 进入技术交流群获更多技术成长. 本文来自 MageByte-青叶编写 上次我们说过 时间复 ...