题意:有一些男生女生互相了解,要求选出最大的学生之间互相了解。

思路:只需要将不了解的学生之间建边就可转化成最大独立集问题 : 结点数-二分图最大匹配。 直接套模版就可

代码如下:

 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(二分图匹配--最大独立集)相关推荐

  1. POJ 2724 Purifying Machine (二分图匹配)

    题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...

  2. 【Step1】【二分图匹配】poj 1274-The Perfect Stall

    题目链接 题目大意 输入数据中,第一行给出n,表示n个奶牛. 接下来n行,每行一个x,xi表示第i头奶牛可以选择x个谷仓中的一个进行匹配.接下来x个数,表示谷仓的编号(1~n之间) 一个谷仓也只能有一 ...

  3. 总结 · 二分图匹配

    感觉二分图匹配的内容很杂还很难理解...需要总结一下啊..... 1.二分图最大匹配:边数最多的匹配叫做最大匹配. 算法:匈牙利算法O(V*E) 例题:BZOJ 1059 题解在这 1 #includ ...

  4. P3731 二分图匹配必经边

    题意经过一番转换变成了 让你在一个二分图上删一条边使得二分图的最大独立集大小至少+1 二分图的最大独立集=点数-最小点覆盖(最大匹配) 点数是固定不变的 所以我们要减少最大匹配数 则删掉的哪一条边必须 ...

  5. 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题

    了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...

  6. [bzoj1143][二分图匹配]祭祀

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...

  7. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  8. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  9. 【网络流24题】I、 方格取数问题(二分图的最大独立集/最小割)

    I. 方格取数问题(二分图的最大独立集/最小割) [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 ...

最新文章

  1. 计算机水平flash试题,计算机flash考试试题
  2. 深度学习的40种应用
  3. 2010年十大投资机会(转载)
  4. Python 技术篇-whl库安装失败经验总结
  5. matlab 小波变换_matlab小波工具箱实例(二):时频分析和连续小波变换
  6. git创建与管理远程分支
  7. VTK:可视化之Kitchen
  8. 欢迎来到 C# 9.0(Welcome to C# 9.0)
  9. shell脚本触发java程序支持传参补跑 +crontab定时器_02
  10. 信息学奥赛C++语言:语文成绩
  11. magento SEO
  12. powerbuilder提示不是下拉窗口_制作简易工资查询模板,下拉菜单选择姓名即可显示...
  13. 2019蓝桥:奇数倍数问题
  14. 腐蚀rust服务器命令_腐蚀RUST基本指令及服务器指令大全
  15. nic占用率很高 Linux,linux – 许多丢弃了我的NIC数据包
  16. 高等数学(第七版)同济大学 习题7-7 个人解答
  17. 微信故障,算不算是小事?
  18. 为评职称!走捷径花钱发论文?骗你没商量!
  19. SpringCloud Alibaba 从入门到精通(精选)
  20. Eslint 从入门到放弃

热门文章

  1. vh与vw的使用事项
  2. android 软件实现架构。
  3. LeetCode-1.Two Sum
  4. qsort函数的用法
  5. Android的内存优化
  6. [15]APUE:pipe / FIFO
  7. 上周热点回顾(10.27-11.2)
  8. java的reflection
  9. js关闭窗口无提示,不支持FF
  10. C#读写文本文件小结