最小顶点数就能覆盖所有边==二分图的最大匹配
2015-05-31 09:51
351 查看
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <string.h> //hdu 1150 #include <queue> //最小顶点数就能覆盖所有边==二分图的最大匹配 #define N 110 using namespace std; int a , use , vis ; int n, m; /* 假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。 */ bool dfs(int x) { int t; for(t=0; t<m; ++t) { if(a[x][t]&&!vis[t]) { vis[t]=1; if(use[t]==-1||dfs(use[t])) { use[t]=x; return true; } } } return false; } int main() { int i, t, j, k, s, T; while(scanf("%d", &n)&&n) { scanf("%d%d", &m, &T); memset(use, -1, sizeof(use)); memset(a, 0, sizeof(a)); for(i=0; i<T; ++i) { scanf("%d %d %d", &k, &j, &t); if(j==0||t==0)continue; //注意,如果机器有一边需要0的话则直接continue,因为一开始初始化就是0,先把0的全解决 a[j][t]=1; } for(t=s=0; t<n; ++t) { memset(vis, 0, sizeof(vis)); if(dfs(t)) s++; } printf("%d\n", s); } return 0; }
相关文章推荐
- 给老师的建议?????
- NOI2005 维修数列(综合包括求区间的最大值)---Splay
- PostgreSQL function里面调用function
- hdu3487 (splay伸展树 区间翻转,切割,插入)
- Combination Sum
- Android TextView里直接显示图片的三种方法
- HTML 表单(form) 使用详解
- Redhat6.2升级为Redhat6.3 (linux内核升级)
- 回调函数理解-以Fragment为例
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- NOI2004 郁闷的出纳员
- Java web基础总结十之—— jsp EL表达式
- OpenGL_ES加载TGA/BMP纹理
- hdu4217 Data Structure?
- 【Android】工程中文件的关联性
- [转]动态规划解最长公共子序列问题
- Linux下whereis和which的区别
- percona-toolkit-2.2.14-1安装时Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
- 工厂模式
- 让一类只能产生一个实例对象