记录编号 294392 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]猫和狗 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2016-08-12 06:14:52 内存使用 2.25 MiB
显示代码纯文本
#include<cstdio>
const int maxn=505;
int like[maxn],dislike[maxn],typ[maxn];
struct edge{
	int to,next;
}lst[maxn*maxn];int len=1;
int first[maxn];
void addedge(int a,int b){
	lst[len].to=b;
	lst[len].next=first[a];
	first[a]=len++;
}
int T;int vis[maxn],match[maxn];
bool dfs(int x){
	for(int pt=first[x];pt;pt=lst[pt].next){
		if(vis[lst[pt].to]!=T){
			vis[lst[pt].to]=T;
			if(!match[lst[pt].to]||dfs(match[lst[pt].to])){
				match[lst[pt].to]=x;//match[x]=lst[pt].to;
				return true;
			}
		}
	}
	return false;
}
int main(){
	freopen("catdog.in","r",stdin);
	freopen("catdog.out","w",stdout);
	int ncat,ndog,nhuman;
	scanf("%d %d %d",&ncat,&ndog,&nhuman);
	char buf1[10],buf2[10];int x,y;
	for(int i=1;i<=nhuman;++i){
		scanf("%s %s",buf1,buf2);
		x=0;y=0;
		for(int j=1;buf1[j]!='\0';++j)x=x*10+buf1[j]-'0';
		for(int j=1;buf2[j]!='\0';++j)y=y*10+buf2[j]-'0';
		if(buf1[0]=='C'){typ[i]=2;
			like[i]=x;
			dislike[i]=ncat+y;
		}
		else{typ[i]=1;
			like[i]=ncat+x;
			dislike[i]=y;
		}
	}
	for(int i=1;i<=nhuman;++i){
		for(int j=i+1;j<=nhuman;++j){
			if(typ[i]==typ[j])continue;
			if(like[i]==dislike[j]||like[j]==dislike[i]){
				addedge(i,j);addedge(j,i);
			}
		}
	}
	int ans=0;
	for(int i=1;i<=nhuman;++i){
		if(typ[i]==2)continue;
		vis[i]=++T;
		if(!match[i]&&dfs(i)){
			ans++;
		}
	}
	printf("%d\n",nhuman-ans);
	fclose(stdin);fclose(stdout);
	return 0;
}