hdu 3829 Cat VS Dog 二分匹配 最大独立点集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829
题目大意:
给定N个猫,M个狗,P个小朋友,每个小朋友都有喜欢或者不喜欢的某猫或者某狗
管理员从中删除一些猫狗,使得尽可能多的小朋友开心
思路:
假设A小朋友喜欢的猫是B小朋友所不喜欢的,或者说A不喜欢的狗是B喜欢的,那么说明两者之间存在矛盾关系
问题就是求出互相之间没有矛盾的小朋友的集合
那么就是点数-最大匹配数的问题了,就是读入数据有点麻烦
代码:
#include <iostream>
#include <string>
#include <map>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=;
int N,M,P,c_cnt,d_cnt;
int g[maxn][maxn],vis[maxn],who[maxn];
struct node {
int data[][];//[0][]like [1][]don't like
} ans[maxn];
map<string,int> c,d;
map<string,int>::iterator it;
string s;
void rs(int i,int dir) {
if(s[]=='C') {
if(!c.count(s)) c.insert(pair<string,int>(s,c_cnt++));
it=c.find(s);
ans[i].data[dir][it->second]=;
} else {
if(!d.count(s)) d.insert(pair<string,int>(s,d_cnt++));
it=d.find(s);
ans[i].data[dir][it->second]=;
}
}
void read() {
memset(g,,sizeof(g));
memset(who,,sizeof(who));
memset(ans,,sizeof(ans));
c.clear();
d.clear();
c_cnt=;
d_cnt=;
for(int i=; i<=P; ++i) {
cin>>s;//like
int dir=;
rs(i,dir);
cin>>s;//don't like
dir^=;
rs(i,dir);
}
for(int i=; i<=P; ++i)
for(int j=i+; j<=P; ++j)
for(int k=; k<=; ++k)
if((ans[i].data[][k]==&&ans[j].data[][k]==)||(ans[i].data[][k]==&&ans[j].data[][k]==))
g[i][j]=g[j][i]=;
}
bool Find(int x) {
for(int i=; i<=P; ++i) {
if(g[x][i]&&!vis[i]) {
vis[i]=;
if(!who[i]||Find(who[i])) {
who[i]=x;
return true;
}
}
}
return false;
}
void slove() {
int sum=;
for(int i=; i<=P; ++i) {
memset(vis,,sizeof(vis));
if(Find(i)) sum++;
}
cout<<P-sum/<<endl;
}
int main() {
while(cin>>N>>M>>P) {
read();
slove();
}
return ;
}
hdu 3829 Cat VS Dog 二分匹配 最大独立点集的更多相关文章
- hdu 3829 Cat VS Dog 二分图匹配 最大点独立集
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Prob ...
- hdu 2768 Cat vs. Dog (二分匹配)
Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)
HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...
- HDU 3829——Cat VS Dog——————【最大独立集】
Cat VS Dog Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...
- HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】
<题目链接> 题目大意: 动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些动物.假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy. ...
- HDU 3829 - Cat VS Dog (二分图最大独立集)
题意:动物园有n只猫和m条狗,现在有p个小孩,他们有的喜欢猫,有的喜欢狗,其中喜欢猫的一定不喜欢狗,喜欢狗的一定不喜欢猫.现在管理员要从动物园中移除一些动物,如果一个小孩喜欢的动物留了下来而不喜欢的动 ...
- HDU 3829 Cat VS Dog(最大独立集)
题目大意: 有n只猫,有m只狗.现在有P个学生去参观动物园.每个孩子有喜欢的动物和不喜欢的动物.假如他喜欢猫那么他就一定不喜欢狗(反之亦然). 如果一个孩子喜欢一个动物,那么这个动物不会被移除,若是不 ...
- HDU 3829 Cat VS Dog
题意: p个人 每一个人有喜欢和讨厌的动物 假设选出的动物中包括这个人喜欢的动物同一时候不包括他讨厌的动物那么这个人会开心 问 最多几个人开心 思路: 二分图最大独立集 利用人与人之间的冲突 ...
- HDU - 3829 Cat VS Dog (二分图最大独立集)
题意:P个小朋友,每个人有喜欢的动物和讨厌的动物.留下喜欢的动物并且拿掉讨厌的动物,这个小朋友就会开心.问最多有几个小朋友能开心. 分析:对于每个动物来说,可能既有人喜欢又有人讨厌,那么这样的动物实际 ...
随机推荐
- label联动checkbox
label联动checkbox时,若label包含在checkbox外层时label不需for属性,设置label的display属性为block时可以使整个div联动.
- python中openpyxl的用法【安装,以及一些基本的操作】
概述 Openpyxl是python中简单易用的操作excel电子表格的一个模块.接下来呢,跟博主一起学习一下吧 ----_<_>_---- 首先先清楚一些excel的基本概念: 在op ...
- angular 1.5.3各种模块使用(一)
1.angular cookie的用法:(1)引入angular-cookies(2)注入ngCookies这模块(3)想要更改cookies存储位置的话要添加内置服务$cookiesProvider ...
- 开源纯C#工控网关+组态软件(五)从网关到人机界面
一. 引子 之前都在讲网关,不少网友关注如何实现界面.想了解下位机变量变化,是怎样一步步触发人机界面动画的. 这个步步触发,实质上是变量组(Group)的批量数据变化(DataChange)事件, ...
- [译]ASP.NET Core 2.0 布局页面
问题 如何在ASP.NET Core 2.0项目中共享可见元素.代码块和指令? 答案 新建一个空项目,首先添加GreetingService服务和UserViewModel模型: public int ...
- .NEL IL实现对象深拷贝
对于深拷贝,通常的方法是将对象进行序列化,然后再反序化成为另一个对象.例如在stackoverflow上有这样的解决办法:https://stackoverflow.com/questions/785 ...
- Scrum Meeting Alpha - 6
Scrum Meeting Alpha - 6 NewTeam 2017/10/31 地点:主南203 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了个人博客和班级列表部分API的包装 完成个 ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- Java多线程由易到难
线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令. public class ...
- JAVA_读取XML文件
在项目中,很多种情况都需要将一些配置写在xml文件或者properties文件里,便于日后修改配置,好维护等等. 1.新建xml文件 <?xml version="1.0" ...