比赛 2011.3.17 评测结果 AAAAWWWWWW
题目名称 奶牛议会 最终得分 40
用户昵称 Pom 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-03-17 11:37:02
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

const int MAXM=4001;

struct cow
{
	int f1,f2,c1,c2;
}C[MAXM];

int n,m,i,j,k,re[20],ans[20];
char ch;
bool b[MAXM];

void pd()
{
	memset(b,false,sizeof(b));
	int tot=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			if (re[i]==C[j].c1 && i==C[j].f1 || re[i]==C[j].c2 && i==C[j].f2)
				if (!b[j])
				{
					b[j]=true;
					++tot;
				}
	if (tot!=m) return;
	for (i=1;i<=n;i++)
	{
		if (ans[i]==-1) ans[i]=re[i];
		else if (ans[i]!=re[i]) ans[i]=2;
	}
}

void dfs(int dep)
{
	if (dep>n)
	{
		pd();
		return;
	}
	re[dep]=0;
	dfs(dep+1);
	re[dep]=1;
	dfs(dep+1);
}

int main()
{
	freopen("cowngress.in","r",stdin);
	freopen("cowngress.out","w",stdout);
	scanf("%d%d",&n,&m);
	if (n>15)
	{
		printf("IMPOSSIBLE\n");
		return 0;
	}
	for (i=1;i<=n;i++)
		ans[i]=-1;
	for (i=1;i<=m;i++)
	{
		scanf("%d%c%c",&j,&ch,&ch);
		C[i].f1=j;
		if (ch=='N') C[i].c1=0;
		else C[i].c1=1;
		scanf("%d%c%c",&j,&ch,&ch);
		C[i].f2=j;
		if (ch=='N') C[i].c2=0;
		else C[i].c2=1;
	}
	dfs(1);
	for (i=1;i<=n;i++)
	{
		if (ans[i]==2 || ans[i]==-1) printf("?");
		if (ans[i]==1) printf("Y");
		if (ans[i]==0) printf("N");
	}
	printf("\n");
	return 0;
}