hdu2444The Accomodation of Students (最大匹配+判断是否为二分图)
题意
首先判断所有的人可不可以分成两部分,每部分内的所有人都相互不认识。如果可以分成 则求两部分最多相互认识的对数。
解题
类似分成两组,同组互不相关,就可能使判断是否为二分图
能否分成两部分 则是判断是否是一个二分图。
无向图G为二分图的充分必要条件是:G至少有两个顶点,且当存在回路时,其所有回路的长度均为偶数。回路就是环路,也就是判断是否存在奇数环。
判断二分图方法:用染色法,把图中的点染成黑色和白色。
首先取一个点染成白色,然后将其相邻的点染成黑色,如果发现有相邻且同色的点,那么就退出,可知这个图并非二分图。
#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
using namespace std;
int map[][],vist[],match[],n;
int find(int i)
{
for(int j=;j<=n;j++)
if(!vist[j]&&map[i][j])
{
vist[j]=;
if(match[j]==||find(match[j]))
{
match[j]=i; return ;
}
}
return ;
}
int isTwo()//判断是否为二分图
{
queue<int>q;
memset(vist,,sizeof(vist));
q.push(); vist[]=;
while(!q.empty())
{
int p=q.front(); q.pop();
for(int j=;j<=n;j++)
if(map[p][j])
{
if(vist[j]==)
{
if(vist[p]==)vist[j]=;else vist[j]=;
q.push(j);
}
else if(vist[j]==vist[p])
return ;
}
}
return ;
}
int main()
{
int m,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,,sizeof(map));
while(m--)
{
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=;
}
if(!isTwo()||n==)
{
printf("No\n"); continue;
}
memset(match,,sizeof(match));
int ans=;
for(int i=;i<=n;i++)
{
memset(vist,,sizeof(vist));
ans+=find(i);
}
printf("%d\n",ans/);//除2是因为对称,1认识2 与 2认识1 属同一情况
}
}
hdu2444The Accomodation of Students (最大匹配+判断是否为二分图)的更多相关文章
- hdu2444The Accomodation of Students (最大匹配+推断是否为二分图)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- The Accomodation of Students(判断二分图以及求二分图最大匹配)
The Accomodation of Students Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &a ...
- hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)
http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS Me ...
- HDU 2444 The Accomodation of Students(判断是否可图 + 二分图)
题目大意:有一群人他们有一些关系,比如A认识B, B认识C, 但是这并不意味值A和C认识.现在给你所有互相认识的学生,你的任务是把所有的学生分成两个一组, 住在一个双人房里.相互认识的同学可以住在一个 ...
- hdu2444The Accomodation of Students
思路: 二分图判断+最大匹配模板 二分图判断的方法很好想,没有离散的基础凭空给你个图让你判断也很容易想到染色法,简单的介绍下就是用queue来做,标记一个点为x则他所有的邻点都为x',然后递归的执行下 ...
- HDU-2444-The Accomodation of Students(二分图判定,最大匹配)
链接: https://vjudge.net/problem/HDU-2444#author=634579757 题意: There are a group of students. Some of ...
- HDU 2444 The Accomodation of Students(推断是否是二分图)
题目链接 题意:n个学生,m对关系,每一对互相认识的能住一个房间.问否把这些学生分成两组,要求每组的学生都互不认识.求最多须要多少个房间. 能否分成两组?也就是说推断是不是二分图,推断二分图的办法,用 ...
- HDU 2444 The Accomodation of Students(判断二分图+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdu 2444 The Accomodation of Students 判断是否构成二分图 + 最大匹配
此题就是求最大匹配.不过需要判断是否构成二分图.判断的方法是人选一点标记为红色(0),与它相邻的点标记为黑色(1),产生矛盾就无法构成二分图.声明一个vis[],初始化为-1.通过深搜,相邻的点不满足 ...
随机推荐
- 我不熟悉的list
其实在日常中,链表的题目做的比较多,但是使用STL自带链表的还是比较少,所以里面的一些API不大熟悉.这边也简要介绍一些. 基本的一些API 先列举的这些和上面几篇用法几乎一样,所以不再累述. 赋值相 ...
- wkhtmltopdfhtml php生成pdf快照,网页截图,网页快照完整版 (原)
首先,安装(linux安装为例) 1.下载wkhtmltopdf wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf ...
- mysql报错处理:incompatible with sql_mode=only_full_group_by
问题: 服务报错:incompatible with sql_mode=only_full_group_by,如下图所示: 分析: NLY_FULL_GROUP_BY是MySQL提供的一个sql_mo ...
- ubuntu16.04增大swap空间
参见->这里 参见->这里
- Alpha发布--美工+文案
此作业对应要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677 一.美工: 1.产品logo 2.原型页面展示 2.1 进入萌 ...
- sqlToolbox 1.82 Beta版 下载
下载链接:https://pan.baidu.com/s/1jCTRe0NGgEb5qF3BDN_jTQ 久违的回忆. 2019年8月30日13点43分
- IDEA创建各种不同的工程的方法
javaWeb工程 maven创建javaSE项目 上面点击next: 项目右下角选择自动导入: maven创建javaWeb工程 项目右下角选择自动导入maven项目 上面创建成功之后发现没有jav ...
- 从txt导入数据到mysql
当要往mysql的table中录入数据量大的时候,直接从txt录入已有数据是一个愉快的选择. 在录入数据前要做一些格式上的准备 1. txt编码要是utf-8,无BOM 2. 每行以\t\n结尾,每列 ...
- 阶段3 2.Spring_05.基于XML的IOC的案例1_1 基于XML的IOC的案例-案例准备
导坐标 创建数据库表 create table account( id int primary key auto_increment, name varchar(40), money float )c ...
- ES6的对象属性简写
在ES6中允许我们在设置一个对象的属性的时候不指定属性名. 不使用ES6: const name='Ming', age='18', city='Shanghai'; const student ={ ...