<题目链接>

题目大意:

动物园有n条狗。m头猫。p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物。如今动物园要转移一些动物。假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy。问动物最多能使几个小孩happy。

解题分析:

因为本题不同的小孩之间喜好可能会产生冲突,所以,要使最多的小孩满意,不妨将这些冲突的小孩之间相互连线,然后求出不产生冲突的最大点集,于是本题就转化为了最大独立集问题。最大独立集=总点数-最大匹配数。

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
using namespace std; const int M=;
int match[M];
bool vis[M];
vector<int>map[M];
string lk[M],dislk[M];
int n,m,p,uN;
bool dfs(int u){
for(int i=;i<map[u].size();i++){
if(!vis[map[u][i]]){
vis[map[u][i]]=true;
if(match[map[u][i]]==-||dfs(match[map[u][i]])){
match[map[u][i]]=u;
return true;
}
}
}
return false;
}
int hungary(){
int res=;
memset(match,-,sizeof(match));
for(int u=;u<p;u++){
memset(vis,false,sizeof(vis));
res+=dfs(u);
}
return res;
}
int main(){
while(scanf("%d%d%d",&n,&m,&p)!=EOF){
for(int i=;i<M;i++)map[i].clear();
for(int i=;i<p;i++){
cin>>lk[i]>>dislk[i];
}
for(int i=;i<p;i++)
for(int j=i+;j<p;j++)
if(lk[i]==dislk[j]||dislk[i]==lk[j]){ //产生矛盾的人之间建立无向边
map[i].push_back(j);
map[j].push_back(i);
}
printf("%d\n",p-hungary()/); //最大独立集=总点数-最大匹配
}
return ;
}

2018-11-16

HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】的更多相关文章

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

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

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

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

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

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

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

  5. HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)

    题意:每个人有喜欢的猫和不喜欢的狗.留下他喜欢的猫他就高心,否则不高心.问最后最多有几个人高心. 思路:二分图求最大匹配 #include<cstdio> #include<cstr ...

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

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

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

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

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题目大意: 给定N个猫,M个狗,P个小朋友,每个小朋友都有喜欢或者不喜欢的某猫或者某狗 管理员从 ...

  9. HDU 3829 Cat VS Dog

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

随机推荐

  1. Confluence 6 导入一个 Confluence 站点

    有下面 2 种类方法可以导入一个站点 - 通过上传一个文件或者从你 Confluence 服务器上读取一个目录.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录上 ...

  2. nginx实践(四)之静态资源web服务(防盗链)

    防盗链目的 防止资源被盗用 http_refer 主要是判断refer信息,判断请求来源是不是合法身份 语法 实例 参数说明: none表示允许没有代理的头信息过来,blocked表示refer信息不 ...

  3. MYSQL查询系列 常考问题

    表结构: `student`('id'.'name'.'code'.'age'.'sex')学生表 `teacher`('id'.'name')教师表 `course`('id'.'name'.'te ...

  4. day10 函数2

    为什么需要函数? 先使用目前的知识点实现一个需求: """ 三个功能   1.登录   2.购物车   3.收藏夹       收藏夹和 购物车 需要先登录才能使用!   ...

  5. Metasploit渗透测试模块(一)

    1.Metasploit模块加载 初始化界面,成功要加载数据库 查看 Metasploit中已近存在的漏洞模块使用 show payloads

  6. BrupSuite渗透测试笔记(十)

    一.Brup Repeater通常结合Proxy(历史记录),Scanner(扫描记录).Target(站点地图)等,通过其他工具上的右键执行[Send to Repeater],之后跳转到Repea ...

  7. ShadingJdbc学习

    可参考:https://blog.csdn.net/jadebai/article/details/86716082 https://blog.csdn.net/jadebai/article/det ...

  8. RabbitMQ中客户端的Channel类里各方法释义

    // The contents of this file are subject to the Mozilla Public License // Version 1.1 (the "Lic ...

  9. springcloud feign传输List的坑

    无法直接传输List 错误方法1: @RequestMapping(value = "/stat/merchant/get_merchant_compare_info", meth ...

  10. SSO单点登录原理

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...