/**
题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
链接:https://vjudge.net/problem/UVALive-3415
题意:老师带学生去旅游,要求从n个学生中选出一些学生,满足任意两个学生至少要满足下面的四条中的一条。
1,身高相差大于40cm
2,性别相同
3,最喜欢的音乐不同类型
4,最喜欢的体育比赛相同类型 输出可以挑选的最多学生人数。 思路:最大独立集做法。
选出来的学生必须满足上面四个条件至少一个。
那么如果两个学生都不满足上面的条件,则最多只能从中选一个人。 所以:如果学生a和学生b不满足上面的条件,那么连一条边,题目要求选的学生中,任意两个学生不能有边相连。
这就是最大独立集(选择尽量多的结点,使得任意一条边的两个端点不会同时被选中)问题。 处理:左边编号为1~n的学生,右边也是编号1~n的学生,相同编号的学生不连边,如果学生a和学生b不满足上面的条件,那么连一条边。
由于令x为左边的学生编号,y为右边的学生编号(x!=y)
如果x与y连边,那么y与x也会连一条边,所以边数多了一倍。
那么最大匹配数也会多一倍。
本题结果:ans = N-最大匹配数/2: 最大独立集=结点数-最大匹配数。 */ #include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
const int MAXN = ;
int f[MAXN][MAXN];
int vit[MAXN], S[MAXN], T[MAXN];
int N;
///模板
bool Find(int x)///走交替路,寻找增广路
{
for(int i = ; i <= N; i++){///n表示右侧点数。
if(f[x][i]&&vit[i]==){
vit[i] = ;
if(T[i]==||Find(T[i])){
T[i] = x;///右边第i个点和左边第x个点匹配成功。
S[x] = i;///左边第x个点和右边第i个点匹配成功。
return true;
}
}
}
return false;
}
struct node
{
int h;
char sex[];
char music[];
char sport[];
}stu[MAXN];
int main()
{
int n, m, k;
cin>>k;
while(k--){
scanf("%d",&n);
N = n;
memset(f, , sizeof f);
for(int i = ; i <= n; i++){
scanf("%d%s%s%s",&stu[i].h,stu[i].sex,stu[i].music,stu[i].sport);
}
for(int i = ; i <= n; i++){///每条边都重复了一次。对称。最终匹配数要对半;
for(int j = ; j <= n; j++){
if(i==j) continue;
if(abs(stu[i].h-stu[j].h)<=&&stu[i].sex[]!=stu[j].sex[]&&strcmp(stu[i].music,stu[j].music)==&&strcmp(stu[i].sport,stu[j].sport)!=){//都不满足
f[i][j] = ;
}
}
} int ans = ;
memset(T, , sizeof T);
memset(S, , sizeof S);
///模板
for(int i = ; i <= N; i++){
memset(vit, , sizeof vit);
if(Find(i)) ans++;
}
printf("%d",N-ans/);
printf("\n");
}
return ;
}

Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游的更多相关文章

  1. Guardian of Decency UVALive - 3415(最大独立集板题)

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

  2. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  3. HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)

    Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. POJ 2771 Guardian of Decency(最大独立集数=顶点数-最大匹配数)

    题目链接: http://poj.org/problem?id=2771 Description Frank N. Stein is a very conservative high-school t ...

  5. 训练指南 UVALive - 3415(最大点独立集)

    layout: post title: 训练指南 UVALive - 3415(最大点独立集) author: "luowentaoaa" catalog: true mathja ...

  6. poj——2771 Guardian of Decency

    poj——2771    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5916   ...

  7. poj 2771 Guardian of Decency 解题报告

    题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距   ...

  8. poj 2771 Guardian of Decency(最大独立数)

    题意:人与人之间满足4个条件之一即不能成为一对(也就说这4个条件都不满足才能成为一对),求可能的最多的单身人数. 思路:把男女分为两部分,接下来就是二分图的匹配问题.把能成为一对的之间连边,然后求出最 ...

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

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

随机推荐

  1. [Functional Programming Monad] Combine Stateful Computations Using A State Monad

    The true power of the State ADT really shows when we start combining our discrete, stateful transact ...

  2. 关于js加密解密

    有的时候有些网站的js用简单的eval混淆加密了.解密其实很简单的 解密JS的eval加密码的方式例如这段: 很多朋友以为这段代码是“加密”的,其实这也谈不上是加密,只能算是一种编码(Encode)或 ...

  3. Jenkins +JUnit

    转载:https://www.cnblogs.com/helloIT/p/5761740.html 1.环境 windows10 专业版 Jenkins 2.7 apache-ant-1.9.6 JD ...

  4. 集合系列之fail-fast 与fail-safe 区别

    一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ...

  5. Xshell连接mysql数据库乱码问题解决思路总结

    乱码问题一直是一件让人头疼的事情,乱码就是编码格式不统一产生的,下面将一些常见的解决思路整理: 先Xshell连接上数据库,查看数据的编码格式: 一般需要看这么几个地方(附修改命令): 1.数据库的编 ...

  6. ubuntu错误解决E: Sub-process /usr/bin/dpkg returned an error code (1)

    在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try –help for more information.dpkg:处理 get ...

  7. WindowManager.LayoutParams全解

    WindowManager是Android中一个重要的服务(Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的各个W ...

  8. cocos2d-x:初探TestLua

    打开\cocos2d-x-2.2.3\cocos2d-win32.vc2012.sln sln里面有个TestLuaproject 初探完成...(不要逗) 启动一下project,cocos2d-x ...

  9. UIScrollerView当前显示3张图

    代码地址如下:http://www.demodashi.com/demo/11173.html WSLScrollView 功能描述:这是在继承UIView的基础上利用UIScrollerView进行 ...

  10. mongodb的基本语法(一)

    一.数据库常用命令 1.Help查看命令提示 help db.help(); db.yourColl.help(); db.youColl.find().help(); rs.help(); 2.切换 ...