HDU2444 The Accomodation of Students(二分图最大匹配)
有n个关系,他们之间某些人相互认识。这样的人有m对。
你需要把人分成2组,使得每组人内部之间是相互不认识的。
如果可以,就可以安排他们住宿了。安排住宿时,住在一个房间的两个人应该相互认识。
最多的能有多少个房间住宿的两个相互认识。
先是要判断是否为二部图,然后求最大匹配。
学习一下模板~
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=;
vector<int> g[maxn];
int linker[maxn];
bool used[maxn];
int uN;
int matchs[maxn];
int cnt[maxn];
bool dfs (int u) {
int i;
for (i=;i<g[u].size();i++) {
int v=g[u][i];
if (!used[v]) {
used[v]=true;
if (linker[v]==-||dfs(linker[v])) {
linker[v]=u;
return true;
}
}
}
return false;
}
int hungary () {
int res=;
int u;
memset(linker,-,sizeof(linker));
for (u=;u<=uN;u++) {
memset(used,false,sizeof(used));
if (dfs(u)) res++;
}
return res;
}
bool judge (int x,int y) {
int i;
for (i=;i<g[x].size();i++) {
if (cnt[g[x][i]]==) {
cnt[g[x][i]]=-y;
matchs[g[x][i]]=true;
if (!judge(g[x][i],-y)) return false;
}
else if (cnt[g[x][i]]==y) return false;
}
return true;
}
bool matched () {
int i;
memset(matchs,false,sizeof(matchs));
for (i=;i<=uN;i++) {
if (g[i].size()&&!matchs[i]) {
memset(cnt,,sizeof(cnt));
cnt[i]=-;
matchs[i]=true;
if (!judge(i,-)) return false;
}
}
return true;
}
int main () {
int m;
int i;
int u,v;
while (~scanf("%d %d",&uN,&m)) {
for (i=;i<=uN;i++)
if (g[i].size()) g[i].clear();
while (m--) {
scanf ("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
if (matched()) printf ("%d\n",hungary()/);
else printf ("No\n");
}
return ;
}
HDU2444 The Accomodation of Students(二分图最大匹配)的更多相关文章
- HDU2444 The Accomodation of Students —— 二分图最大匹配
题目链接:https://vjudge.net/problem/HDU-2444 The Accomodation of Students Time Limit: 5000/1000 MS (Java ...
- hdu_2444The Accomodation of Students(二分图的判定和计算)
hdu_2444The Accomodation of Students(二分图的判定和计算) 标签:二分图匹配 题目链接 题意: 问学生是否能分成两部分,每一部分的人都不相认识,如果能分成的话,两两 ...
- HDU2444 :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 二分图判定+最大匹配
题目来源:HDU 2444 The Accomodation of Students 题意:n个人能否够分成2组 每组的人不能相互认识 就是二分图判定 能够分成2组 每组选一个2个人认识能够去一个双人 ...
- HDU2444 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 (二分图存在的判定以及最大匹配数)
There are a group of students. Some of them may know each other, while others don't. For example, A ...
- hdu2444 The Accomodation of Students(推断二分匹配+最大匹配)
//推断是否为二分图:在无向图G中,假设存在奇数回路,则不是二分图.否则是二分图. //推断回路奇偶性:把相邻两点染成黑白两色.假设相邻两点出现颜色同样则存在奇数回路. 也就是非二分图. # incl ...
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
- HDU2444 The Accomodation of Students【匈牙利算法】
题意: 有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出N ...
随机推荐
- 初步自学Java小结
本周学习Java使我印象最深刻的Java开发环境的安装与设置,通过下载Eclipse IDE for Java Developers初步搭建好了Java开发环境,之后利用视频了解了Java程序的类型及 ...
- not under version control
表示这个文件没有在SVN的控制之下 你在执行commit操作的时候,只有处于SVN控制之下的文件才能被commit,从update得到的文件是在SVN控制之下的(比如原来就存在的文本文件,你可以对其修 ...
- Codeforces Round #570 (Div. 3) B. Equalize Prices
原文链接https://codeforces.com/contest/1183/problem/B 题意:进行Q组测试,在每组中有长度为n的数组a[i],然后现在给你一个K,问你找到一个bi使得|ai ...
- JS高级---函数作为返回值使用
函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ...
- IntelliJ IDEA 2017.3尚硅谷-----取消更新
- AcWing 5. 多重背包问题 II
//二进制优化 最后变为01背包 #include <iostream> #include <algorithm> using namespace std; , M = ; i ...
- LTE引理——解决数论竞赛题的利器
LTE (Lifting The Exponent Lemma)引理是一个解指数型不定方程的强力工具.它在Olympiad folklore非常知名,虽然它的起源已经无从查找了.它和Hensel’s ...
- Jenkins Pipeline waitForQualityGate pending 超时
请参考链接:http://www.iotxing.com/2019/06/12/258/jenkins-pipeline-waitforqualitygate%E8%B6%85%E6%97%B6/ 主 ...
- 【做题笔记】洛谷P1036 选数
作为一个 DFS 初学者这题真的做得很惨...其实窝学 DFS 一年多了,然后一开始就学不会最近被图论和数据结构打自闭后才准备好好学一学233 一开始,直接套框架,于是就有 #include < ...
- webpack: webpack简单打包后的代码(1)
源码 本文研究的源码地址为:https://github.com/collect-webpack/practice/tree/master/webpack-01 在本研究的前提是 entry 的配置为 ...