比赛 20110730 评测结果 WWAWAWAAAW
题目名称 线段 最终得分 50
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-07-30 09:19:11
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#define MM(a,b) memset(a,b,sizeof(a))
using namespace std;

struct edge
{
	int t,c;
	edge *next;
}E[100001],*V[301];
int eh,n,m;
inline void addedge(int a,int b,int c)
{
	E[++eh].next=V[a];  V[a]=E+eh;  V[a]->t=b;  V[a]->c=c;
	E[++eh].next=V[b];  V[b]=E+eh;  V[b]->t=a;  V[b]->c=c;
}

int bel[301],col[301];

void init()
{
	scanf("%d%d",&n,&m);
	MM(V,0);MM(bel,0);MM(col,0);
	eh=0;
	int a,b,c;
	for (;m;--m)
	{
		scanf("%d%d%d",&a,&b,&c);
		addedge(a,b,c);
	}
}

bool dfs(int u,int c)
{
	col[u]=c;
	for (edge *e=V[u];e;e=e->next)
	{
		if (!bel[e->t])
		{
			bel[e->t]=bel[u];
			if (!dfs(e->t,c ^ e->c)) return false;
		}
		else if ((col[e->t] ^ c) != e->c) return false; 
	}
	return true;
}

void solve()
{
	for (int i=1;i<=n;i++)
	if (!bel[i])
	{
		bel[i]=i;
		if (!dfs(i,0))
		{
			printf("No Answer\n");
			return;
		}
	}
	if (bel[1]==bel[n]) printf("%d\n",col[1] ^ col[n]);
}

int main()
{
	freopen("line.in","r",stdin);
	freopen("line.out","w",stdout);
	int T;
	scanf("%d",&T);
	for (;T;--T)
	{
		init();
		solve();
	}
	return 0;
}