这题大白书例题 :

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. jenkins之另辟蹊径实现根据svn项目实现智能选择

    项目要求,根据svn选择的trunk或branches及tags里的各分支,动态选择参数.一开始认为很简单,直接用jenkins中的List Subversion tags插件及active choi ...

  2. Spark ML包,数据挖掘示例数据Affairs

    1.数据字段解释 affairs:一年来婚外情的频率   gender:性别   age:年龄   yearsmarried:婚龄   children:是否有小孩   religiousness:宗 ...

  3. numpy中的reshape中参数为-1

    上篇文章中的reshape(-1,2),有的时候不明白为什么会有参数-1,可以通过查找文档中的reshape()去理解这个问题 根据Numpy文档(https://docs.scipy.org/doc ...

  4. 初学Listener

    一. Listener 介绍 Servlet API提供了大量监听器来监听web应用的的内部事件,从而允许当web内部事件发生时回调事件监听器内的方法. 使用listener分为两步 定义LIsten ...

  5. 解决VMware安装ubuntu16.04后无法全屏的问题

    参考教程:http://www.jb51.net/os/Ubuntu/356462.html 双系统经常崩,故在windows10下装了个ubuntu的虚拟机,安装完成后无法全屏,进入系统设置调试显示 ...

  6. 2.3AutoEncoder

    AutoEncoder是包含一个压缩和解压缩的过程,属于一种无监督学习的降维技术. 神经网络接受大量信息,有时候接受的数据达到上千万,可以通过压缩 提取原图片最具有代表性的信息,压缩输入的信息量,在将 ...

  7. Kettle 4.2源码分析第二讲--Kettle插件结构体系简介

    1.  插件体系结构 1.1. 插件技术原理 1.1.1.    插件概念说明 插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能.在英 ...

  8. 0002python中dict和list的特殊构造

    >>> myinfor = {"name":"qiwsir","site":"qiwsir.github.io& ...

  9. iOS耳机等音频输出设备切换的通知

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

  10. ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务

    感谢一路走来默默支持和陪伴的你~~~ -------------------欢迎来访,拒绝转载-------------------- 一.Rest API基础 ArcGIS 平台提供了丰富的REST ...