记录编号 181865 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 二分图游戏 最终得分 100
用户昵称 Gravatar_stranger 是否通过 通过
代码语言 C++ 运行时间 0.551 s
提交时间 2015-08-26 16:16:07 内存使用 0.34 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
inline int read(){
	int x;char ch;
	while(!isdigit(ch=getchar()));x=ch-48;
	while(isdigit(ch=getchar()))x=x*10+ch-48;
	return x;
}
vector<int> v[1001];
int match[1001],ans[1001],b[1001],tim;
int n1,n2,n,m;
bool find(int x){
	if(b[x]==tim)return 0;
	b[x]=tim;
	for(int i=0;i<v[x].size();i++){
		if(b[v[x][i]]!=tim){
			if(!match[v[x][i]]||find(match[v[x][i]])){
				match[v[x][i]]=x;
				match[x]=v[x][i];
				return 1;
			}
		}
	}
	return 0;
}
int main(){
   freopen("graphgame.in","r",stdin);freopen("graphgame.out","w",stdout);
	int x,y;
	n1=read();n2=read();m=read();
	n=n1+n2;
	for(int i=1;i<=m;i++){
		x=read();y=read();
		v[x].push_back(y+n1);
		v[y+n1].push_back(x);
	}
	for(int i=1;i<=n1;i++){
		tim++;
		find(i);
	}
	for(int i=1;i<=n;i++){
		if(!match[i]) continue;
		m=match[i];
		match[i]=match[m]=0;
		tim++;b[i]=tim;
		if(!find(m)){
			ans[i]=1;
			match[m]=i;
			match[i]=m;
		}
	}for(int i=1;i<=n1;i++)ans[i]?putchar('N'):putchar('P');
		putchar('\n');
		for(int i=n1+1;i<=n;i++)ans[i]?putchar('N'):putchar('P');
		putchar('\n');//while(1);
	return 0;
}