比赛 “Asm.Def战记之夏威夷”杯 评测结果 AAWATTTTTT
题目名称 Asm.Def的报告 最终得分 30
用户昵称 mikumikumi 运行时间 12.001 s
代码语言 C++ 内存使用 1.46 MiB
提交时间 2015-11-06 09:44:01
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
const int SIZEN=100010;
int N,M;
int H[SIZEN];
class miku
{
public:
	int A,B;
}P[SIZEN];
void read()
{
	scanf("%d%d",&N,&M);
	for(int i=1;i<=M;i++) scanf("%d%d",&P[i].A,&P[i].B);
	/*for(int i=1;i<=M;i++)
	{
		cout<<P[i].A<<" "<<P[i].B<<endl;
	}*/
}
bool dfs(int x)
{
	if(x>M) return 1;
	int a=abs(P[x].A+0.0),b=abs(P[x].B+0.0);
	if(P[x].A<0&&H[a]==1&&P[x].B<0&&H[b]==1) return 0;
	if(P[x].A>0&&H[a]==2&&P[x].B>0&&H[b]==2) return 0;
	if(P[x].A<0&&H[a]==1&&P[x].B>0&&H[b]==2) return 0;
	if(P[x].A>0&&H[a]==2&&P[x].B<0&&H[b]==1) return 0;
	if(H[a]==1&&P[x].A>0) if(dfs(x+1)) return 1;
	if(H[a]==2&&P[x].A<0) if(dfs(x+1)) return 1;
	if(H[a]==0)
	{
		if(P[x].A<0) H[a]=2;
		else H[a]=1;
		if(dfs(x+1)) return 1;
	}
	if(H[b]==1&&P[x].B>0) if(dfs(x+1)) return 1;
	if(H[b]==2&&P[x].B<0) if(dfs(x+1)) return 1;
	if(H[b]==0)
	{
		if(P[x].B<0) H[b]=2;
		else H[b]=1;
		if(dfs(x+1)) return 1;
	}
	return 0;
}
void work()
{
	dfs(1);
	for(int i=1;i<=N;i++) 
	{
		if(H[i]==2) printf("0 ");
		else printf("1 ");
	}
}
int main()
{
	freopen("asm_report.in","r",stdin);
	freopen("asm_report.out","w",stdout);
	read();
	work();
	return 0;
}