HDU3829_Cat VS Dog
题目是这样的,给定一些人喜欢某只猫或者狗,讨厌某只猫或者狗。求最多能够同时满足多少人的愿望?
题目很有意思。建模后就很简单了。
对于同一只猫或者狗,如果有一个讨厌,另一个人喜欢,那么这两个连一条边。最终,最大独立集数等于最大匹配数就可以了。。
Orz。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#define maxn 505
using namespace std; vector<int> likec[maxn],disc[maxn],liked[maxn],disd[maxn];
vector<int> v[maxn];
int n,m,p,ans,t1,t2;
int f[maxn],tag[maxn];
char s1[maxn],s2[maxn]; void init()
{
ans=0;
for (int i=1; i<=p; i++) v[i].clear(),f[i]=0,tag[i]=0;
for (int i=1; i<=n; i++) likec[i].clear(),disc[i].clear();
for (int i=1; i<=m; i++) liked[i].clear(),disd[i].clear();
} int num(char S[])
{
int cur=0;
for (int i=0; S[i]; i++) cur=cur*10+S[i]-'0';
return cur;
} int dfs(int cur,int T)
{
if (tag[cur]==T) return false;
else tag[cur]=T;
for (unsigned i=0; i<v[cur].size(); i++)
{
if (tag[v[cur][i]]==T) continue;
if (f[v[cur][i]]==0 || dfs(f[v[cur][i]],T))
{
f[v[cur][i]]=cur;
f[cur]=v[cur][i];
return true;
}
}
return false;
} int main()
{
while (scanf("%d%d%d",&n,&m,&p)!=EOF)
{
init();
for (int i=1; i<=p; i++)
{
scanf("%s%s",s1,s2);
t1=num(s1+1),t2=num(s2+1);
if (s1[0]=='C') likec[t1].push_back(i);
else liked[t1].push_back(i);
if (s2[0]=='C') disc[t2].push_back(i);
else disd[t2].push_back(i);
}
for (int i=1; i<=n; i++)
for (unsigned x1=0; x1<likec[i].size(); x1++)
for (unsigned x2=0; x2<disc[i].size(); x2++)
{
v[likec[i][x1]].push_back(disc[i][x2]);
v[disc[i][x2]].push_back(likec[i][x1]);
}
for (int i=1; i<=m; i++)
for (unsigned x1=0; x1<liked[i].size(); x1++)
for (unsigned x2=0; x2<disd[i].size(); x2++)
{
v[liked[i][x1]].push_back(disd[i][x2]);
v[disd[i][x2]].push_back(liked[i][x1]);
}
for (int i=1; i<=p; i++)
{
if (f[i]!=0) continue;
if (dfs(i,i)) ans++;
}
printf("%d\n",p-ans);
}
return 0;
}
HDU3829_Cat VS Dog的更多相关文章
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...
- 斑点检测(LoG,DoG)(下)
斑点检测(LoG,DoG)(下) LoG, DoG, 尺度归一化 上篇文章斑点检测(LoG,DoG)(上)介绍了基于二阶导数过零点的边缘检测方法,现在我们要探讨的是斑点检测.在边缘检测中,寻找的是二阶 ...
- 斑点检测(LoG,DoG) [上]
斑点检测(LoG,DoG) [上] 维基百科,LoG,DoG,DoH 在计算机视觉中,斑点检测是指在数字图像中找出和周围区域特性不同的区域,这些特性包括光照或颜色等.一般图像中斑点区域的像素特性相似甚 ...
- ural 1246. Tethered Dog
1246. Tethered Dog Time limit: 1.0 secondMemory limit: 64 MB A dog is tethered to a pole with a rope ...
- Cat VS Dog
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total ...
- DoG 、Laplacian、图像金字塔详解
DoG(Difference of Gaussian) DoG (Difference of Gaussian)是灰度图像增强和角点检测的方法,其做法较简单,证明较复杂,具体讲解如下: Differe ...
- HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)
题意:每个人有喜欢的猫和不喜欢的狗.留下他喜欢的猫他就高心,否则不高心.问最后最多有几个人高心. 思路:二分图求最大匹配 #include<cstdio> #include<cstr ...
- 编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish 和Dog,定义主类E,在其main方法中分别创建其对象并测试对象的特性。
package animal; public class Animal { //成员属性 private String kind; public String getKind() { return k ...
- sjtu1586 Dog
Description 隔壁村的阿黑的Dog没有跑, 但Dog已经15岁了, 相当于人类达到了79岁. 为了防止Dog患上犬类认知障碍 (Canine cognitive dysfunction, C ...
随机推荐
- Jsp中格式化时间戳的常用标签
接下来一段时间的记录,虽然不是一些什么全新的知识,但是作为后台开发人员都是应该必须掌握的前端基础技能,说实话,每一个后台程序员的短板就在于前端技能的弱而造就了不能更上一层楼.从今天开始,我将彻底开启菜 ...
- Python语言简介以及特点
编程语言的分为编译型语言和解释型语言: 1. 编译型语言: (1) 编译型语言的代表:C.C++.Delphi等, (2) 编译型语言的运行方式:编译 -> 运行 (3) 编译型语言的优缺点分析 ...
- 别再犯低级错误,带你了解更新缓存的四种Desigh Pattern
在我们使用分布式缓存Redis或者Memcached编写更新缓存数据代码时,我们总是会犯一个逻辑错误.先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中.试想,两个并发操作,一个是更新操 ...
- DP使用GUI推送WIN客户端是报110:1022错误的解决办法
在使用GUI推送WIN客户端时,输入用户名和密码后报错: [Critical 110::1022] Cannot connect to the SCM (Service Control Manage ...
- Kubernetes集群部署篇( 一)
K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常 ...
- lscpi命令详解
基础命令学习目录 lspci是一个用来查看系统中所有PCI总线以及连接到该总线上的设备的工具. 命令格式为 lspci -参数 (不加参数显示所有硬件设备) 至于有哪些参数及其详细用法可以看下这篇博客 ...
- Data truncation: Truncated incorrect DOUBLE value:
在写sql查询语句queryRunner.update(connection,"update account set balance=? where name=?",account ...
- Dailu Scrum (2015/10/27)
在周日晚上PM已经为大家分配了部分的代码修改工作,今天晚上PM召集了被分配代码工作的3个DEV一起讨论要求修改的代码.在共同讨论的过程中确有发现以下代码的不规范之处,PM当即要求我们先要修改规范代码的 ...
- c# 程序重启设定
问题情境: 程序随着时间运行,越来越大.暂时想到的两种方法,一是反攻代码,查看占内存大的函数,是不是没有回收.再就是暴力设定程序定时重启. 解决原理: 定时重启:暂设定timer,时间匹配执行rest ...
- Task 4.3 求环形数组的最大子数组和
任务要求:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n- ...