HDU 3829 Cat VS Dog(最大独立集)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3fffffff
#define maxn 505
int n, m, p, P[maxn], color[maxn];///n只猫 m只狗 p个人
bool G[maxn][maxn], vis[maxn];///构图
vector<vector<int> > LikeDog;///喜欢第k只狗的人邻接表
vector<vector<int> > DisDog;///不喜欢这只够的人的集合
vector<vector<int> > LikeCat;///同上
vector<vector<int> > DisCat; void Init()
{
LikeDog.clear();
LikeDog.resize(m+);
LikeCat.clear();
LikeCat.resize(n+); DisDog.clear();
DisDog.resize(m+);
DisCat.clear();
DisCat.resize(n+);
memset(G, false, sizeof(G) );
} void MakeMap()
{
for(int i=; i<=m; i++)
{
int len1 = LikeDog[i].size();
int len2 = DisDog[i].size();
for(int j=; j<len1; j++)
{
int v1 = LikeDog[i][j];
for(int k=; k<len2; k++)
{
int v2 = DisDog[i][k];
G[v1][v2] = true;
G[v2][v1] = true;
}
}
} for(int i=; i<=n; i++)
{
int len1 = LikeCat[i].size();
int len2 = DisCat[i].size();
for(int j=; j<len1; j++)
{
int v1 = LikeCat[i][j];
for(int k=; k<len2; k++)
{
int v2 = DisCat[i][k];
G[v1][v2] = true;
G[v2][v1] = true;
}
}
}
}
bool Find(int u)
{
for(int i=; i<=p; i++)
{
if(!vis[i] && G[u][i])
{
vis[i] = true;
if(P[i] == - || Find(P[i]) )
{
P[i] = u;
return true;
}
}
}
return false;
}
void DFS(int u,int Color)
{
color[u] = Color;
for(int i=; i<=p; i++)
{
if(G[u][i] && !color[i])
{
DFS(i, -Color);
}
}
} int solve()
{
int ans = ;
memset(P, -, sizeof(P));
memset(color, , sizeof(color)); for(int i=; i<=p; i++)
{
if(color[i] == )
DFS(i, );
}
for(int i=; i<=p; i++)
{
memset(vis, false, sizeof(vis));
if(color[i] == && Find(i) )
ans ++;
}
return p - ans;
} int main()
{
while(scanf("%d %d %d ",&n, &m, &p) != EOF)
{
char ch1, ch2;
int a, b;
Init();
for(int i=; i<=p; i++)
{
scanf("%c%d %c%d",&ch1, &a, &ch2, &b);
getchar();
if(ch1 == 'C')
{
LikeCat[a].push_back(i);
DisDog[b].push_back(i);
}
else
{
LikeDog[a].push_back(i);
DisCat[b].push_back(i);
}
}
MakeMap();
printf("%d\n", solve() );
}
return ;
}
HDU 3829 Cat VS Dog(最大独立集)的更多相关文章
- HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】
<题目链接> 题目大意: 动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些动物.假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy. ...
- 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 二分图匹配 最大点独立集
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Prob ...
- HDU 3829 - Cat VS Dog (二分图最大独立集)
题意:动物园有n只猫和m条狗,现在有p个小孩,他们有的喜欢猫,有的喜欢狗,其中喜欢猫的一定不喜欢狗,喜欢狗的一定不喜欢猫.现在管理员要从动物园中移除一些动物,如果一个小孩喜欢的动物留了下来而不喜欢的动 ...
- HDU - 3829 Cat VS Dog (二分图最大独立集)
题意:P个小朋友,每个人有喜欢的动物和讨厌的动物.留下喜欢的动物并且拿掉讨厌的动物,这个小朋友就会开心.问最多有几个小朋友能开心. 分析:对于每个动物来说,可能既有人喜欢又有人讨厌,那么这样的动物实际 ...
- hdu 3829 Cat VS Dog 二分匹配 最大独立点集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题目大意: 给定N个猫,M个狗,P个小朋友,每个小朋友都有喜欢或者不喜欢的某猫或者某狗 管理员从 ...
- HDU 3829 Cat VS Dog
题意: p个人 每一个人有喜欢和讨厌的动物 假设选出的动物中包括这个人喜欢的动物同一时候不包括他讨厌的动物那么这个人会开心 问 最多几个人开心 思路: 二分图最大独立集 利用人与人之间的冲突 ...
- hdu 2768 Cat vs. Dog 最大独立集 巧妙的建图
题目分析: 一个人要不是爱狗讨厌猫的人,要不就是爱猫讨厌狗的人.一个人喜欢的动物如果离开,那么他也将离开.问最多留下多少人. 思路: 爱猫和爱狗的人是两个独立的集合.若两个人喜欢和讨厌的动物是一样的, ...
随机推荐
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- Navicat Premium 自动备份mysql和sqlserver
mysql篇: 1.点击计划 2.点击新建处理作业 3.选择需要备份的数据库,上级可用任务 4.点击保存按钮,输入保存文件名 5.保存后点击设置计划任务 6.计划里新建保存时间,应用后输入系统密码即可 ...
- 关于URL 解码, 编码
由于近期客户需要用到CA认证,此CA认证采用的是URL方式出传值 使用指定的编码对象将 URL 编码的字符串转换为已解码的字符串. 编码个人理解就是将某字符串以某种方式储存起来,而解码则以其编码格式得 ...
- Java实现ajax
jsp端的代码,sucess:function(){} 里面就是返回的处理 function ChangeTime(){ alert("www"); var startYmd = ...
- updatepanel局部刷新功能,实现注册时对用户名的检测
updatepanel的使用 通过将控件放入到updatepanel中,实现局部刷新. 前台代码:<asp:ScriptManager ID="ScriptManager1" ...
- java simple check whether a file or directory.
Ref: check whether a file or directory First, make sure the path exists by using: new File(path).ex ...
- 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)
委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来 ...
- spring data jpa Specification 例子
/** * 封装查询条件 * * @param baseQueryDTO * @return */ private Specification<ActivityBase> getSpeci ...
- java中的继承要点
java的一大特性既是:继承. 1.因为有了一个子类继承了一个父类,才有了后面的多态. 2.类的继承,不要为了节省代码,为了继承而继承,把那个没有任何相关的类链接在一起,继承必须用在 is a,就是例 ...
- 【POJ3468】【zkw线段树】A Simple Problem with Integers
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...