uva 12168(二分图最大匹配--最大独立集)
2014-02-25 23:15
369 查看
题意:有若干人食猫狗爱好者。每个人会讨厌一个猫喜欢一个狗,或讨厌一个狗喜欢一个猫。然后问你设计一个展览最多能满足几个人的需求(就是他们喜欢的被展出,不喜欢的不展出)。
思路:一开始想错了方向所以耽误了时间,其实我们只需要把互相矛盾的两个人连线,然后求出最大独立集即可。最大独立集=结点数-最大匹配数
代码如下:
View Code
思路:一开始想错了方向所以耽误了时间,其实我们只需要把互相矛盾的两个人连线,然后求出最大独立集即可。最大独立集=结点数-最大匹配数
代码如下:
/************************************************** * Author : xiaohao Z * Blog : http://www.cnblogs.com/shu-xiaohao/ * Last modified : 2014-02-25 22:13 * Filename : uva_12168.cpp * Description : * ************************************************/ #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <set> #include <map> #define MP(a, b) make_pair(a, b) #define PB(a) push_back(a) using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<unsigned int,unsigned int> puu; typedef pair<int, double> pid; typedef pair<ll, int> pli; typedef pair<int, ll> pil; const int INF = 0x3f3f3f3f; const double eps = 1E-6; const int LEN = 1002; int Map[LEN][LEN], n, c, d; int p[LEN][2], vis[LEN], link[LEN]; bool dfs(int u){ for(int i=0; i<n; i++){ if(Map[u][i] && !vis[i]){ vis[i] = 1; if(link[i] == -1 || dfs(link[i])){ link[i] = u; return true; } } } return false; } int hungary(){ int ret = 0; memset(link, -1, sizeof link); for(int i=0; i<n; i++){ memset(vis, 0, sizeof vis); if(dfs(i)) ret ++ ; } return ret; } int main() { // freopen("in.txt", "r", stdin); ios::sync_with_stdio(false); int T, num; char an; cin >> T; while(T--){ cin >> c >> d >> n; memset(Map, 0, sizeof Map); for(int i=0; i<n; i++){ cin >> an >> num;num--; if(an == 'D') num += c; p[i][0] = num; cin >> an >> num; num--; if(an == 'D') num += c; p[i][1] = num; } for(int i=0; i<n; i++) for(int j=0; j<n; j++){ if(i == j) continue; if(p[i][1] == p[j][0] || p[j][1] == p[i][0]){ Map[i][j] = 1; } } int ans = hungary(); printf("%d\n", (2*n - ans)/2); } return 0; }
View Code
相关文章推荐
- 黑马程序员-----day02基础知识笔记
- wxpython ubuntu statusbar not showing
- mapreduce过程
- web.py 问题笔记
- SQL2012分页
- 算法 最小生成树Prim
- C++文件操作详解(ifstream、ofstream、fstream)
- Cstyle的札记,版本控制 SVN,第0篇
- BlockingQueue
- 复制构造函数(拷贝函数)
- 浅谈千万级PV/IP规模高性能高并发网站架构
- Unity3D开发(九):Unity3d流光效果
- 一个高效的分页存储过程
- Java实现Map集合二级联动
- 用Mybatis generator去生成代码的时候老是报错,catalog null, schema null……
- JAVA学习笔记——第三章 Java语言基础
- Java内存查看与分析
- \sdk\include\wspiapi.h(47) : error C2265: '<Unknown>' : reference to a zero-sized array is illegal 解
- 常见多线程并发服务器编程模型
- 【WebView】warnning:所有WebView方法必须在主线程调用(4.0) 所有WebView方法必须在同一线程调用(4.4)