题目大概意思为有G个女生和B个男生,每个男生都相互认识,每个女生也相互认识,部分男生与部分女生相互认识,求最大相互认识的点集

题目很简单,只用稍微转换一下思路即可,因为我们要以男生与女生来构建二分图,所以所有边都应该连接男生和女生,因此男生与男生和女生与女生之间不应该有边相连。
因此我们以两人互不相识为条件构建边,这样就能得到一个二分图。

然后因为两点之间没有线等于两人认识,所以我们求的 |最大互相认识的点集| = |最大独立集|
有公式 : |最大独立集| + |最小顶点覆盖| = |所有顶点集|
二分图中 |最小顶点覆盖| = |最大匹配|
所以 |最大互相认识的点集| = |最大独立集| = |所有顶点集| - |最小顶点覆盖| = |所有顶点集| - |最大匹配|
(一道基础题 )

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
vector<int> data[205];
bool ddd[205][205];
int match[205];
bool used[205];
void add_edge(int from, int to)
{data[from].push_back(to);
}
bool dfs(int v)
{used[v] = true;for(int i = 0; i < data[v].size(); i++){int u = data[v][i], w = match[u];if(w < 0 || !used[w] && dfs(w)){match[u] = v;return true;}}return false;
}
int main()
{int flag = 1;while(1){memset(ddd, false, sizeof(ddd));int G, B, M;scanf("%d %d %d", &G, &B, &M);if(G == 0 && B == 0 && M == 0){break;}for(int i = 0; i < G; i++){data[i].clear();}for(int i = 0; i < M; i++){int from, to;scanf("%d %d", &from, &to);ddd[from-1][to-1] = true;}for(int i = 0; i < G; i++){for(int j = 0; j < B; j++){if(!ddd[i][j]){add_edge(i, j);}}}memset(match, -1, sizeof(match));int res = 0;for(int i = 0; i < G; i++){memset(used, 0, sizeof(used));if(dfs(i)){res++;}}printf("Case %d: %d\n", flag, G + B - res);flag++;}
}

poj3692(二分图最大独立集)相关推荐

  1. 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)

    二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...

  2. 洛谷 - P3355 骑士共存问题(二分图最大独立集)

    题目链接:点击查看 题目大意:给出一个n*n的棋盘,上面有m个点无法放置棋子,现在要求尽可能多的放 马,使得所有的马两两无法互相攻击,题目要求输出可以放置的最大数量 题目分析:二分图最大独立集的裸题, ...

  3. CH - 6901 骑士放置(二分图最大独立集-二分图最大匹配+奇偶拆点)

    题目链接:点击查看 题目大意:给出一个n*m的棋盘,有t个点是禁止放棋子的,现在按照马走日的规则,问在互不影响的情况下最多能放多少个马 题目分析:这里首先简单介绍一下二分图最大独立集的定义: 通俗来讲 ...

  4. [二分图最大独立集] BZOJ4808:马

    棋盘01染色,然后把互相能打到的点连边,发现是个二分图. 二分图最大独立集 == 点数 −- 最大匹配数 Dinic练手- #include<cstdio> #include<que ...

  5. 二分图HK算法[数论+二分图最大独立集]:Lightoj1356

    Prime Independence LightOJ - 1356 题目大意:给你n个数,你从这个集合中挑选出若干个数,使得这个集合的数里面两两之间a/b!=k[k是质数并且a>b]a/b!=k ...

  6. poj1466(二分图最大独立集)

    题目大概意思即求一个点集,使男女互没关系 求两两互不相交的顶点集合,即求独立集 有公式 : |最大独立集| + |最小顶点覆盖| = |所有点集合| 又由于所有边连接男和女,所以为二分图 二分图问题中 ...

  7. hdu 1068(二分图最大独立集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 解题思路: 这题大概意思就是说找出一个最大的集合使得该集合的任意两个人木有关系. 根据最大独立集 ...

  8. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】

    题意 Frank是一个思想有些保守的高中老师.有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅行中萌生爱意.为了降低这种事情发生的概率,他决定确保带出去的任意两个学生至少要满足下面四条中的一条 ...

  9. BZOJ1324Exca王者之剑BZOJ1475方格取数——二分图最大独立集

    题目描述   输入 第一行给出数字N,M代表行列数.N,M均小于等于100 下面N行M列用于描述数字矩阵 输出 输出最多可以拿到多少块宝石 样例输入 2 2 1 2 2 1 样例输出 4 题意就是选取 ...

最新文章

  1. 用鸿蒙跑了个 hello world
  2. http://www.myexception.cn/web/426486.html
  3. Oracle Primavera P6 R84单机版安装教程
  4. 微服务系列:服务注册与发现的实现原理、及实现优劣势比较
  5. Nginx系列1之部分模块详解
  6. python保存模型与参数_基于pytorch的保存和加载模型参数的方法
  7. 假如给Go语言加上注解,程序会变怎样?
  8. 数据驱动测试之——CSV+TestNG
  9. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
  10. 2018-05-02 os.path
  11. 通信系统中语音信号的仿真分析
  12. 【SSDP 协议介绍】
  13. Duilib控件拖动改变大小
  14. 算法篇:最长公共子串(牛客)
  15. 大地测量学基础 | 时间系统
  16. Windows的CMD的NET命令net start , net stop ...
  17. 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据
  18. 正则表达式常用操作符
  19. java程序员 女装_java程序员面试着装要求是什么?
  20. centos6 安装 nscd 清除DNS缓存

热门文章

  1. OpenStack入门修炼之实战--实现阿里云ESC多FLAT网络(21)
  2. iptables踩坑记
  3. Html5 Canvas 扫雷 (IE9测试通过)
  4. mysql json类型数组索引_MySQL JSON 类型数据操作
  5. 这五款Python工具都是最常用的,尤其是第三种,初学者必须掌握的
  6. python程序员最害怕的东西,面试!恭喜你收到了offer,来看下吧
  7. 我的家乡网页设计_Graphic Design|康石石浅谈LOGO设计在作品集中的创作方法
  8. crt证书linux使用,linux下使用openssl生成https的crt和key证书
  9. mysql实现pr曲线_ROC 曲线与 PR 曲线
  10. python的功能介绍_Python之int内部功能介绍