比赛 10.10.18noip模拟 评测结果 MMMMMMMMMM
题目名称 罪犯问题D 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-10-18 21:48:43
显示代码纯文本
#include <fstream>

#define I_F "criminald.in"
#define O_F "criminald.out"

using namespace std;

int n;
short f[50001];
short map[50001][1000][2];

ifstream fin(I_F);
ofstream fout(O_F);

void Input();
int abs(int x);
void GetColor(int x, short y);
void Search();

int main()
{
	Input();
	Search();
	fin.close();
	fout.close();
	return 0;
}

void Input()
{
	int m;
	fin>>n>>m;
	int i,t;
	for (i=0; i<m; i++)
	{
		fin>>t;
		f[t]=-1;
	}
}

int abs(int x)
{
	if (x>0)
		return x;
	else
		return -x;
}

void GetColor(int x, short y)
{
	f[x]=y;
	short i;
	for (i=1; i<=map[x][0][0]; i++)
		if (f[map[x][i][0]]==0)
			GetColor(map[x][i][0],y*map[x][i][1]);
}

void Search()
{
	char t;
	int a,b,c;
	fin>>t;
	while (t!='E')
	{
		if (t=='A')
		{
			fin>>a;
			if (f[a]==-1)
				fout<<"Yes\n";
			else if (f[a]==1)
				fout<<"No\n";
			else
				fout<<"Unknown\n";
		}
		else
		{
			fin>>a>>b;
			c=abs(b);
			map[a][++map[a][0][0]][0]=c;
			map[a][map[a][0][0]][1]=-b/c;
			map[c][++map[c][0][0]][0]=a;
			map[c][map[c][0][0]][1]=-b/c;
			if (f[a]!=0)
				GetColor(a,f[a]);
			else if (f[c]!=0)
				GetColor(c,f[c]);
		}
		fin>>t;
	}
}