LA 3415 保守的老师
题目链接:https://vjudge.net/contest/161820#problem/E
题意:
有一些同学,要从中选出一些同学来,人数尽量多,但是,两两之间要满足至少一个条件(身高差>40,性别相同,。。。)
分析:
最大独立集:尽量选择多的结点,任意两个结点不相邻;
男同学X,女同学Y,如果可能产生关系,连一条边,这样这两个人就不会在一起;
最大独立集=n-最大匹配
证明:
最小点覆盖 = 对于每一条边,至少有一个点要被选中
最大独立集 = 对于每一条边,最多一个点被选中
从定义中可以看出,这两个是互补的;
#include <bits/stdc++.h>
using namespace std;
const int maxn = +;
struct BPM {
int n,m;
vector<int> G[maxn];
int left[maxn];
bool T[maxn];
int right[maxn];
bool S[maxn];
void init(int n,int m) {
this->n = n;
this->m = m;
for(int i=;i<n;i++)
G[i].clear();
}
void AddEdge(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 v = G[u][i];
if(!T[v]) {
T[v] = true;
if(left[v]==-||match(left[v])) {
left[v] = u;
right[u] = v;
return true;
}
}
}
return false;
}
int solve() {
memset(left,-,sizeof(left));
memset(right,-,sizeof(right));
int ans = ;
for(int u=;u<n;u++) {
memset(S,,sizeof(S));
memset(T,,sizeof(T));
if(match(u))
ans++;
}
return ans;
}
}sol;
struct Student {
int h;
string music,sport;
Student(int h,string music,string sport):h(h),music(music),sport(sport) {}
};
bool conflict(const Student& a,const Student& b) {
return abs(a.h-b.h)<=&&a.music ==b.music && a.sport!=b.sport;
}
int main()
{
int t;
cin>>t;
while(t--) {
int n;
cin>>n;
vector<Student> male,female;
for(int i=;i<n;i++) {
int h;
string gender,music,sport;
cin>>h>>gender>>music>>sport;
if(gender[]=='M') male.push_back(Student(h,music,sport));
else female.push_back(Student(h,music,sport));
}
int x = male.size();
int y = female.size();
sol.init(x,y);
for(int i=;i<x;i++)
for(int j=;j<y;j++)
if(conflict(male[i],female[j]))
sol.AddEdge(i,j);
printf("%d\n",x+y-sol.solve());
}
return ;
}
LA 3415 保守的老师的更多相关文章
- LA 3415 (二分图+最大独立集)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】
题意 Frank是一个思想有些保守的高中老师.有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅行中萌生爱意.为了降低这种事情发生的概率,他决定确保带出去的任意两个学生至少要满足下面四条中的一条 ...
- LA3415保守的老师
题意: 有n个学生,老师要带他们出去玩,但是老师比较保守,怕他们之间萌生爱意,所以带出去的所有同学必须至少满足四个条件中的一组,问最多能带多少人出去玩. 思路: 比较简单二分 ...
- uva 12083 Guardian of Decency (二分图匹配)
uva 12083 Guardian of Decency Description Frank N. Stein is a very conservative high-school teacher. ...
- poj 2771 Guardian of Decency 解题报告
题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距 ...
- Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
/** 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游 链接:https://vjudge.net/problem/UVA ...
- CG基础教程-陈惟老师十二讲笔记
转自 麽洋TinyOcean:http://www.douban.com/people/Tinyocean/notes?start=50&type=note 因为看了陈惟十二讲视频没有课件,边 ...
- cdoj916-方老师的分身 III 【拓扑排序】
http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others) Memo ...
- leggere la nostra recensione del primo e del secondo
La terra di mezzo in trail running sembra essere distorto leggermente massima di recente, e gli aggi ...
随机推荐
- css display flew 伸缩盒模型
父级容器属 <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- window.open打开窗口的几种方式
1. 在当前窗口打开百度,并且使URL地址出现在搜索栏中. window.open("http://www.baidu.com/", "_search"); w ...
- 初识backbone.js
backbone,英文意思是:勇气, 脊骨,但是在程序里面,尤其是在backbone后面加上后缀js之后,它就变成了一个框架,一个js库. backbone.js,不知道作者是以什么样的目的来对其命名 ...
- pat02-线性结构4. Pop Sequence (25)
02-线性结构4. Pop Sequence (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given ...
- IBM Rational Appscan: Part 2 ---reference
http://resources.infosecinstitute.com/appscan-part-2/ By Rohit T|August 16th, 2012 ----------------- ...
- React之特点及常见用法
1.什么是React? React是一个用于构建用户界面的JavaScript库.主要用于构建UI,很多人认为Reatc是MVC中的V(视图). React起源于Facebook的内部项目,用来架构I ...
- python爬取英语学习资料并发送邮件
新建发送邮件类 import smtplib from email.mime.text import MIMEText from email.header import Header class Se ...
- js之strict模式
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量: i = 10 ...
- mysql五:pymysql模块
一.介绍 之前都是通过MySQ自带的命令行客户端工具Mysql来操作数据库,那如何在Python程序中操作数据库呢?这就需要用到pymysql模块了. 这个模块本质就是一个套接字客户端软件,使用前需要 ...
- cocoapods的安装和安装过程中遇到的问题
查看当前的ruby版本,我的版本是ruby 2.0.0p648 小于2.2安装cocoapods时会遇到以下问题 $ ruby -v 查看当前ruby源,默认为 https://rubygems.or ...