这题大白书例题 :

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 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图的更多相关文章

  1. hdu 1068 Girls and Boys(匈牙利算法求最大独立集)

    Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. (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 ...

  3. poj1419 求最大独立集

    题目链接:http://poj.org/problem?id=1419 题意:求最大独立集 思路: 这里有一个定理: 最大独立集=补图的最大团最大团=补图的最大独立集 所以这里我们只要求给出的图的最大 ...

  4. BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 30078  Solved: 7908[Submit][ ...

  5. UVALive 3415 Guardian of Decency(二分图的最大独立集)

    题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学 ...

  6. (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)

    题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...

  7. 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic

    首先是题目链接  http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...

  8. HAOI2017 新型城市化 二分图的最大独立集+最大流+强连通缩点

    题目链接(洛谷):https://www.luogu.org/problemnew/show/P3731 题意概述:给出一张二分图,询问删掉哪些边之后可以使这张二分图的最大独立集变大.N<=10 ...

  9. hdoj1068 Girls and Boys(二分图的最大独立集)

    题意:有n个人,要彼此认识.选择一个集合,使得集合里的每个人相互不认识.求集合中人数的最大值. 求二分图的最大独立集. 公式:最大独立集=顶点数-最大匹配 这个题目中因为集合是一个,所以求出最大匹配数 ...

随机推荐

  1. Centos 7.x系统安装后的初始化配置

    1.配置IP.网关,编辑/etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=none //默认为dhcp ...

  2. Android KITKAT 以上实现沉浸式状态栏

    extends:http://www.jianshu.com/p/f8374d6267ef 代码未行,效果先上 Flyme4.2 Android4.4.4上运行效果 如何实现 在 KITKAT 之后, ...

  3. 近期在看的一段JS(谁能看出我想实现什么功能)

    示例代码: <script type="text/javascript"> !function(){ var e=/([http|https]:\/\/[a-zA-Z0 ...

  4. 伪随机数生成算法-梅森旋转(Mersenne Twister/MT)

    今天主要是来研究梅森旋转算法,它是用来产生伪随机数的,实际上产生伪随机数的方法有很多种,比如线性同余法, 平方取中法等等.但是这些方法产生的随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质 ...

  5. ELK之生产日志收集构架(filebeat-logstash-redis-logstash-elasticsearch-kibana)

    本次构架图如下 说明: 1,前端服务器只启动轻量级日志收集工具filebeat(不需要JDK环境) 2,收集的日志不进过处理直接发送到redis消息队列 3,redis消息队列只是暂时存储日志数据,不 ...

  6. 2018-2019-2 20165330《网络对抗技术》Exp3 免杀原理与实践

    目录 基础问题 相关知识 实验内容 实验步骤 实验过程中遇到的问题 离实战还缺些什么技术或步骤? 实验总结与体会 实验内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...

  7. MTD 移动目标防御技术

    移动目标防御技术,主要包括系统随机化,生物启发MTD,网络随机化,云MTD,动态编译等等.研讨会还就威胁建模和量化移动目标防御技术的效能评估进行了推进.理论和定量的模型对于该技术的颠覆性影响至关重要. ...

  8. Ubuntu 16.04配置国内高速apt-get更新源

    https://www.linuxidc.com/Linux/2017-11/148627.htm Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换到国内比较好的快速更 ...

  9. JZ2440裸板烧写(打补丁)

    制作uImage,需要上网下载内核+patch补丁 1.将内核用ftp发送到 打补丁patch -p1 < ../补丁文件名 打补丁文件(目录) 2.配置 :复制cp  configuratio ...

  10. sublime安装install package

    通过 https://sublime.wbond.net/Package%20Control.sublime-package 下载packageControl文件 下载完成后,打开sublime te ...