题目链接: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 二分匹配 最大独立点集的更多相关文章

  1. hdu 3829 Cat VS Dog 二分图匹配 最大点独立集

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Prob ...

  2. hdu 2768 Cat vs. Dog (二分匹配)

    Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 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 ...

  4. HDU 3829——Cat VS Dog——————【最大独立集】

    Cat VS Dog Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  5. HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】

    <题目链接> 题目大意: 动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些动物.假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy. ...

  6. HDU 3829 - Cat VS Dog (二分图最大独立集)

    题意:动物园有n只猫和m条狗,现在有p个小孩,他们有的喜欢猫,有的喜欢狗,其中喜欢猫的一定不喜欢狗,喜欢狗的一定不喜欢猫.现在管理员要从动物园中移除一些动物,如果一个小孩喜欢的动物留了下来而不喜欢的动 ...

  7. HDU 3829 Cat VS Dog(最大独立集)

    题目大意: 有n只猫,有m只狗.现在有P个学生去参观动物园.每个孩子有喜欢的动物和不喜欢的动物.假如他喜欢猫那么他就一定不喜欢狗(反之亦然). 如果一个孩子喜欢一个动物,那么这个动物不会被移除,若是不 ...

  8. HDU 3829 Cat VS Dog

    题意: p个人  每一个人有喜欢和讨厌的动物  假设选出的动物中包括这个人喜欢的动物同一时候不包括他讨厌的动物那么这个人会开心  问  最多几个人开心 思路: 二分图最大独立集  利用人与人之间的冲突 ...

  9. HDU - 3829 Cat VS Dog (二分图最大独立集)

    题意:P个小朋友,每个人有喜欢的动物和讨厌的动物.留下喜欢的动物并且拿掉讨厌的动物,这个小朋友就会开心.问最多有几个小朋友能开心. 分析:对于每个动物来说,可能既有人喜欢又有人讨厌,那么这样的动物实际 ...

随机推荐

  1. python函数前篇

    函数:函数是指将一组语句的集合通过一个函数名封装起来,要想执行这个函数,只需调用其函数名即可 函数特性: 减少重复代码 使程序变得可扩展 使程序变得易维护 什么是函数? 函数就是具备某一特定功能的工具 ...

  2. 简单的一句sql

    表1 Id Name 1 张三 2 李四 3 王五 表二 Id Name1 Name2 1 1 2 2 2 1 3 2 3 4 1 3 我现在要查出结果如下: Id Name1 Name2 1 张三 ...

  3. 走进 Visual Studio Mobile Center for Xamarin.Forms

    前几篇分别介绍了 Xamarin.Forms 的 MVVM 的 Prism,UITest,Nuint Test,那这样算下来,代码部分基本结构都有了(逻辑就先忽略吧) 那接下来就应该是自动 Build ...

  4. C++11 static_assert

    C++11 static_assert C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言. 其语法:static_assert(常量表达式,提示字符串). ...

  5. HDU1255覆盖的面积

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. awk命令练习

    文件 file.txt的内容格式: 文件中包含名字,电话号码和过去三个月里的捐款 具体内容如下: Mike Harrington:[510] 548-1278:250:100:175 Christia ...

  7. Windows解决anaconda下双python版本安装TensorFlow

    首先,就是双版本anaconda的安装: 以前安装好的是python2.7版本,而TensorFlow的安装仅支持3.5版本的.但是自己本来的2.7版本又不想遗弃.所以安装双版本的: 在anacond ...

  8. 注销/etc/passwd带来的系统登陆不上

    今天在修改虚拟机密码上的时候,将/etc/passwd中root所在的哪行注销掉了,想象是注销了,root登陆时应该不要输入密码,结果是系统进度条走到最后的时候 进入不了系统了. 结果去普及了下/et ...

  9. 算法:javascript截取字符串

    题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...

  10. [html5] 初识绘图canvas

    这个星期被调到别的项目组专门做了一会儿前端,没办法,人太少,我也只能硬着头皮上... 说起来,html5的canvas真的好用,可以画色块,可以嵌入图片,可以通过定位在图片上写字等等 举例如下 在ht ...