poj 3692(二分图匹配--最大独立集)
题意:有一些男生女生互相了解,要求选出最大的学生之间互相了解。
思路:只需要将不了解的学生之间建边就可转化成最大独立集问题 : 结点数-二分图最大匹配。 直接套模版就可
代码如下:
1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-02-20 01:24 5 * Filename : poj_3692.cpp 6 * Description : 7 * ************************************************/ 8 9 #include <iostream> 10 #include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <cmath> 14 #include <algorithm> 15 #include <queue> 16 #include <stack> 17 #include <vector> 18 #include <set> 19 #include <map> 20 #define MP(a, b) make_pair(a, b) 21 #define PB(a) push_back(a) 22 23 using namespace std; 24 typedef long long ll; 25 typedef pair<int, int> pii; 26 typedef pair<unsigned int,unsigned int> puu; 27 typedef pair<int, double> pid; 28 typedef pair<ll, int> pli; 29 typedef pair<int, ll> pil; 30 31 const int INF = 0x3f3f3f3f; 32 const double eps = 1E-6; 33 const int LEN = 402; 34 int g, b, m, n; 35 vector<int> Map[LEN]; 36 int match[LEN], vis[LEN], mp[LEN][LEN]; 37 38 bool dfs(int v){ 39 vis[v] = 1; 40 for(int i=0; i<Map[v].size(); i++){ 41 int u = Map[v][i], w = match[u]; 42 if(w < 0 || !vis[w] && dfs(w)){ 43 match[v] = u; 44 match[u] = v; 45 return true; 46 } 47 } 48 return false; 49 } 50 51 int hungary(){ 52 int ret = 0; 53 memset(match, -1, sizeof match); 54 for(int v = 0; v < n; v++){ 55 if( match[v] < 0){ 56 memset(vis, 0, sizeof vis); 57 if(dfs(v)) ret++; 58 } 59 } 60 return ret; 61 } 62 63 int main() 64 { 65 // freopen("in.txt", "r", stdin); 66 67 int fr, to, kase = 1; 68 while(scanf("%d%d%d", &g, &b, &m)){ 69 if(!g && !b && !m) break; 70 for(int i=0; i<LEN; i++) Map[i].clear(); 71 memset(mp, 0, sizeof mp); 72 for(int i=0; i<m; i++){ 73 scanf("%d%d", &fr, &to); 74 fr--, to--; 75 mp[fr][to+g] = mp[to+g][fr] = 1; 76 } 77 n = g+b; 78 for(int i=0; i<g; i++){ 79 for(int j=g; j<n; j++){ 80 if(i == j) continue; 81 if(!mp[i][j]) Map[i].PB(j); 82 } 83 } 84 int ans = n-hungary(); 85 printf("Case %d: %d\n", kase++, ans); 86 } 87 return 0; 88 }
View Code
转载于:https://www.cnblogs.com/shu-xiaohao/p/3556867.html
poj 3692(二分图匹配--最大独立集)相关推荐
- POJ 2724 Purifying Machine (二分图匹配)
题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...
- 【Step1】【二分图匹配】poj 1274-The Perfect Stall
题目链接 题目大意 输入数据中,第一行给出n,表示n个奶牛. 接下来n行,每行一个x,xi表示第i头奶牛可以选择x个谷仓中的一个进行匹配.接下来x个数,表示谷仓的编号(1~n之间) 一个谷仓也只能有一 ...
- 总结 · 二分图匹配
感觉二分图匹配的内容很杂还很难理解...需要总结一下啊..... 1.二分图最大匹配:边数最多的匹配叫做最大匹配. 算法:匈牙利算法O(V*E) 例题:BZOJ 1059 题解在这 1 #includ ...
- P3731 二分图匹配必经边
题意经过一番转换变成了 让你在一个二分图上删一条边使得二分图的最大独立集大小至少+1 二分图的最大独立集=点数-最小点覆盖(最大匹配) 点数是固定不变的 所以我们要减少最大匹配数 则删掉的哪一条边必须 ...
- 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题
了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...
- [bzoj1143][二分图匹配]祭祀
Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...
- Dinic二分图匹配 || Luogu P3386
题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...
- 二分图匹配匈牙利算法DFS实现
1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...
- 【网络流24题】I、 方格取数问题(二分图的最大独立集/最小割)
I. 方格取数问题(二分图的最大独立集/最小割) [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 ...
最新文章
- 计算机水平flash试题,计算机flash考试试题
- 深度学习的40种应用
- 2010年十大投资机会(转载)
- Python 技术篇-whl库安装失败经验总结
- matlab 小波变换_matlab小波工具箱实例(二):时频分析和连续小波变换
- git创建与管理远程分支
- VTK:可视化之Kitchen
- 欢迎来到 C# 9.0(Welcome to C# 9.0)
- shell脚本触发java程序支持传参补跑 +crontab定时器_02
- 信息学奥赛C++语言:语文成绩
- magento SEO
- powerbuilder提示不是下拉窗口_制作简易工资查询模板,下拉菜单选择姓名即可显示...
- 2019蓝桥:奇数倍数问题
- 腐蚀rust服务器命令_腐蚀RUST基本指令及服务器指令大全
- nic占用率很高 Linux,linux – 许多丢弃了我的NIC数据包
- 高等数学(第七版)同济大学 习题7-7 个人解答
- 微信故障,算不算是小事?
- 为评职称!走捷径花钱发论文?骗你没商量!
- SpringCloud Alibaba 从入门到精通(精选)
- Eslint 从入门到放弃