hdu 2444 The Accomodation of Students 【二分图判断+求最大匹配】
来源:互联网 发布:php未来10年发展 编辑:程序博客网 时间:2024/06/11 22:17
题目链接:http://acm.acmcoder.com/showproblem.php?pid=2444
题意:判断所有人是否分为两个集合,每个集合里的人互不相识。
思路:先判断是否为二分图,是的话求最大匹配,否则输出“No”。
代码:
#include <stdio.h>#include <ctime>#include <math.h>#include <limits.h>#include <complex>#include <string>#include <functional>#include <iterator>#include <algorithm>#include <vector>#include <stack>#include <queue>#include <set>#include <map>#include <list>#include <bitset>#include <sstream>#include <iomanip>#include <fstream>#include <iostream>#include <ctime>#include <cmath>#include <cstring>#include <cstdio>#include <time.h>#include <ctype.h>#include <string.h>#include <assert.h>using namespace std;int n, k;int a, b;const int MAXN = 5010;//点const int MAXM = 50010;//边struct Edge{ int to; int next;}edge[MAXM];int head[MAXN], tot;void init(){ tot = 0; memset(head,-1,sizeof(head));}void addedge(int u,int v){ edge[tot].to = v; edge[tot].next = head[u]; head[u] = tot++;}int linker[MAXN];bool used[MAXN];bool dfs(int u){ for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to; if (!used[v]) { used[v] = true; if (linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return true; } } } return false;}int hungary(){ int ans = 0; memset(linker,-1,sizeof(linker)); for (int u = 1; u <= n; u++) { memset(used,false,sizeof(used)); if (dfs(u)) ans++; } return ans;}int color[510];bool bfs(int u)//染色法 判断二分图{ bool vis[510]; memset(vis,false,sizeof(vis)); for(int i=head[u];i != -1;i=edge[i].next) { int v = edge[i].to; if (color[v] == -1) { color[v] = !color[u]; if (!bfs(v)) return false; } else if (color[v] == color[u]) return false; } return true;}int main(){ while (scanf("%d%d",&n,&k)!=EOF) { init(); while(k--) { scanf("%d%d",&a,&b); addedge(a,b); addedge(b,a); } memset(color,-1,sizeof(color)); //染色法 判断二分图 color[1] = 1; if (!bfs(1)) { puts("No"); continue; } int ans = hungary(); printf("%d\n",ans/2); } return 0;}
0 0
- hdu 2444 The Accomodation of Students(二分图判断+求最大匹配)
- hdu 2444 The Accomodation of Students 【二分图判断+求最大匹配】
- HDU 2444 The Accomodation of Students(判断是否是二分图及求最大匹配)
- HDU 2444 The Accomodation of Students 判断是否为二分匹配+求最大匹配数
- HDU 2444 The Accomodation of Students 判断是否为二分图,二分图的最大匹配
- hdu 2444 The Accomodation of Students (判断二分图,二分图最大匹配)
- hdu 2444 The Accomodation of Students(判断二分图,二分图最大匹配)
- hdu 2444 The Accomodation of Students(二分图判断,二分图最大匹配)
- HDU 2444 The Accomodation of Students(二分图判断+最大二分匹配)
- HDU-2444 The Accomodation of Students(二分图判断+最大二分匹配)
- HDU 2444 The Accomodation of Students (二分图判定、求最大匹配)
- HDU 2444 The Accomodation of Students 判断二分图 + 最大匹配
- hdu 2444 The Accomodation of Students 二分图判断 + 最大匹配
- hdu 2444 The Accomodation of Students (判断是否是二分图,最大匹配)
- hdu 2444 The Accomodation of Students 判断是否为二分图+最大匹配
- hdu 2444 The Accomodation of Students (判断二分图+最大匹配)
- HDU - 2444 The Accomodation of Students(二分图判断+最大匹配)
- HDU 2444 The Accomodation of Students(判断是否为二分图+最大匹配)
- 【Java安全技术探索之路系列:Java可扩展安全架构】之四:JCA(三):JCA编程模型
- 关于Oozie的input-events和done-flag
- 自定义view(一)
- From-Linear-Model-to-Generalized-Linear-Model-Part 1
- onotoone一对一主键关联,懒加载
- hdu 2444 The Accomodation of Students 【二分图判断+求最大匹配】
- 6. 创建版本库
- ant打包war时报错:java.lang.IllegalArgumentException: MALFORMED
- 想个头啊
- 基于MVC4+EasyUI的Web开发框架形成之旅
- 设计模式
- 日常
- MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决
- IOS开发—通过ChildViewController实现view的切换