uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图
这题大白书例题 :
Frank 是一个思想有些保守的高中老师,有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅途中萌生爱意。为了降低这种事情的发生概率,他决定确保带出去的任意两个学生至少要满足下面4条中的一条
1 身高相差大于40
2 性别相同
3 最喜欢的音乐属于不同的类型
4 最喜欢的体育比赛相同
任务帮组Frank挑选尽量多的学生,使得任意两个学生至少满足上述条件中的一条。
解 将不能同时去的人连一条边 就变成求最大独立集,即选择尽量多的节点,使得任意两个节点不相邻。|最大独立集|+|最小顶点覆盖| =|V | 在二分图中 最大匹配为最小顶点覆盖
由于出行中存在男与女 此时可以保证是一个二分图
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn =;
struct person{
int num;
int high;
char male[];
char love_muc[];
char love_ty[];
}P[maxn]; struct BPM {
int n, m; // 左右顶点个数
vector<int> G[maxn]; // 邻接表
int left[maxn]; // left[i]为右边第i个点的匹配点编号,-1表示不存在
bool T[maxn]; // T[i]为右边第i个点是否已标记
int right[maxn]; // 求最小覆盖用
bool S[maxn]; // 求最小覆盖用
void inti(int n,int m){
this->n =n; this->m=m;
for(int i=; i<n; i++) G[i].clear();
}
void add_edg(int u, int v){
G[u].push_back(v);
}
bool match(int u){
S[u]=true;
for(int i=; i<G[u].size(); i++){
int to = G[u][i];
if(!T[to]){
T[to]=true;
if(left[to]==-||match(left[to])){
left[to]=u; right[u]=to;
return true;
}
}
}
return false;
}
int solve(){
memset(left,-,sizeof(left));
memset(right,-,sizeof(right));
int ans=;
for(int i=; i<n; i++){
memset(S,false,sizeof(S));
memset(T,false,sizeof(T));
if(match(i)) ans++;
}
return ans;
}
}solver; int main()
{
int cas;
scanf("%d",&cas);
for(int cc =; cc<=cas; ++cc){
int n;
scanf("%d",&n);
int Mnum=,Fnum=;
for(int i=; i<n; i++){
scanf("%d%s%s%s",&P[i].high,P[i].male,P[i].love_muc,P[i].love_ty);
if(P[i].male[]=='M') P[i].num=Mnum++;
else P[i].num=Fnum++;
}
solver.inti(Mnum,Fnum);
for(int i =; i<n; i++)if(P[i].male[]=='M'){ for(int j=; j<n; j++)
if(
P[j].male[]=='F'&&abs(P[i].high-P[j].high)<=
&&strcmp(P[i].love_muc,P[j].love_muc)==&&
strcmp(P[i].love_ty,P[j].love_ty)!=
) solver.add_edg(P[i].num,P[j].num); }
int ans = solver.solve();
printf("%d\n",n-ans);
}
return ;
}
uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图的更多相关文章
- hdu 1068 Girls and Boys(匈牙利算法求最大独立集)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)
称号: Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- poj1419 求最大独立集
题目链接:http://poj.org/problem?id=1419 题意:求最大独立集 思路: 这里有一个定理: 最大独立集=补图的最大团最大团=补图的最大独立集 所以这里我们只要求给出的图的最大 ...
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- UVALive 3415 Guardian of Decency(二分图的最大独立集)
题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学 ...
- (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...
- 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic
首先是题目链接 http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...
- HAOI2017 新型城市化 二分图的最大独立集+最大流+强连通缩点
题目链接(洛谷):https://www.luogu.org/problemnew/show/P3731 题意概述:给出一张二分图,询问删掉哪些边之后可以使这张二分图的最大独立集变大.N<=10 ...
- hdoj1068 Girls and Boys(二分图的最大独立集)
题意:有n个人,要彼此认识.选择一个集合,使得集合里的每个人相互不认识.求集合中人数的最大值. 求二分图的最大独立集. 公式:最大独立集=顶点数-最大匹配 这个题目中因为集合是一个,所以求出最大匹配数 ...
随机推荐
- 【CF744D】Hongcow Draws a Circle 二分+几何
[CF744D]Hongcow Draws a Circle 题意:给你平面上n个红点和m个蓝点,求一个最大的圆,满足圆内不存在蓝点,且至少包含一个红点. $n,m\le 10^3$ 题解:我们先不考 ...
- yii---生产链接的方法
yii生成链接的方法: Yii::$app->urlManager->createUrl('xxx/xxx') <?= Yii::$app->urlManager->cr ...
- saltstack------安装篇
一.环境准备 系统:centos7 and centos6.8 IP 系统 172.16.1.10 centos7 172.16.1.11 centos7 172.16.1.21 centos6. ...
- 小程序中navigator和wx.navigateTo,wx.redirectTo,wx.reLaunch,wx.switchTab,wx.navigateBack的用法
如果用一句话来表明navigator和API中wx.系列的跳转有什么区别,那就是navigator是在wxml中用标签添加open-type属性来达到和wx.系列一样的效果. navigator的属性 ...
- Mapreduce其他部分
1.hadoop的压缩codec Codec为压缩,解压缩的算法实现. 在Hadoop中,codec由CompressionCode的实现来表示.下面是一些实现: 可分割性:可分割与不可分割的区别:文 ...
- Oracle安全之Oracle日志挖掘
logminer基于包: [oracle@localhost ~]$ ls /u01/oracle/10g/rdbms/admin/dbmslm.sql -->dbms_logmnr工具 /u0 ...
- 《SEO在网页制作中的应用》视频笔记
学习了慕课网<SEO在网页制作中的应用>视频,今天将里面的知识整理一下. 一.SEO介绍 1. 搜索引擎工作原理 搜索引擎现在主流有百度.谷歌.360,他们都有庞大的搜索引擎数据库,每个 ...
- Linux umask限制导致php的mkdir 0777无效
原因:mkdir权限受当前linux umask限制 解决方法: $oldmask = umask(0); mkdir("test", 0777); umask($oldmask) ...
- IOS--jenkins ,app,reengine
传统的对iOS逆向的工具要使用到下面很多: clutchotoolkeychain-dumpersqlitedumpdecryptedclass-dump-zTheos http://iosapp.m ...
- 学习计划 mysql 用户管理与权限
最近在学习数据库的 主从复制 里面涉及到了关于用户及其管理权限的赋予,之前一直没有认真的学习这个. 现在想具体的学习一下. -- 为什么 数据库 要实现多用户管理? 举个最简单的例子,你需要和第三方做 ...