<题目链接>

题目大意:

动物园有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 手动运行和修改

    手动运行一个任务 希望手动运行一个计划任务,进入计划任务的列表中,找到你希望手动运行的计划任务,在这个计划任务的边上选择 运行(Run).这个计划任务将会马上执行. 不是所有的计划任务都可以手动运行的 ...

  2. STL 容器区别:vector、list、deque、set、map的底层实现

    https://blog.csdn.net/shawjan/article/details/45424405

  3. Eclipse+maven+scala+spark环境搭建

    准备条件 我用的Eclipse版本 Eclipse Java EE IDE for Web Developers. Version: Luna Release (4.4.0) 我用的是Eclipse ...

  4. LeetCode(83): 删除排序链表中的重复元素

    Easy! 题目描述: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1-&g ...

  5. 【深度学习】吴恩达网易公开课练习(class1 week3)

    知识点梳理 python工具使用: sklearn: 数据挖掘,数据分析工具,内置logistic回归 matplotlib: 做图工具,可绘制等高线等 绘制散点图: plt.scatter(X[0, ...

  6. es2015(es6)基础知识整理(更新中...)

    1.let let可以声明块级作用域变量 'use strict'; if (true) { let app = 'apple'; } console.log(app); //外面是访问不到app的 ...

  7. 安装AngularJS Batarang遇到的问题

    AngularJS Batarang是AngularJS在谷歌浏览器上的一个调试工具,因为国内目前无法访问谷歌浏览器应用商店,所以Batarang只能离线安装.不过在安装这个插件的过程中遇到了一些麻烦 ...

  8. 20165314 2016-2017-2 《Java程序设计》第8周学习总结

    20165314 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 java中的线程 线程的常用方法 GUI线程 多线程的概念 代码托管

  9. 解决:sudo: pip: command not found

    1-问题:Ubuntu下执行sudo pip install package-name 出现 sudo: pip: command not found 的问题. 2-原因:编译sudo的时候加入了–w ...

  10. Appium Desired Capabilities

    Appium Desired Capabilities Desired Capabilities 是由 keys 和 values 组成的 JSON 对象. 举个简单例子: { "platf ...