题目链接: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. linux安装redis-3.0.7

    一.Redis介绍 1.简介 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类 ...

  2. 根据文字计算出label的高度

    ios7.0之前用: [strtestsizeWithFont:ContentFontconstrainedToSize:CGSizeMake(ScreenWeight -20, 1000) line ...

  3. 上传图文{"errcode":40007,"errmsg":"invalid media_id"}解决方案

    {"errcode":40007,"errmsg":"invalid media_id"}解决方案 网上关于这个问题的解决一般是把thumb ...

  4. 学习UML --用例图

    用例图用于描述系统提供的系列功能.使用用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求.用例图对系统的实现不做任何说明,仅仅是系统功能的描述. 用例图主要在需求分析阶段使用,用于描述 ...

  5. POJ 3468 A Simple Problem with Integers(树状数组区间更新)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 97217   ...

  6. NFS启动时报错Linux NFS:could not open connection for tcp6

    1.1 启动时出现的错误 [root@znix ~]#/etc/init.d/nfs start Shutting down NFS daemon:                          ...

  7. 有道云翻译接口 Show类

    package com.yangchong.fanyi; import java.awt.EventQueue;import java.awt.Toolkit; import javax.swing. ...

  8. Java简单实现UDP和TCP

    TCP实现 TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低. 简单的TCP实现 //服务端 pu ...

  9. mac nexus搭建本地maven服务器

    1.在保证安装jdk 1.7+,去nexus官网下载nexus(http://www.sonatype.com/download-oss-sonatype) 最新版本 2.解压zip文件,配置nexu ...

  10. 使用spring框架中的组件发送邮件

    首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部  点击开启,再用手机发送对应信息到指定号码,然后点击我已发送  获取授权码  注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在 ...