比赛 “Asm.Def战记之夏威夷”杯 评测结果 AAAATTTTTT
题目名称 Asm.Def的报告 最终得分 40
用户昵称 sxysxy 运行时间 12.001 s
代码语言 C++ 内存使用 1.44 MiB
提交时间 2015-11-06 11:12:05
显示代码纯文本
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
//#define dbg

#ifndef dbg
void set_file()
{
	freopen("asm_report.in", "r", stdin);
	freopen("asm_report.out", "w", stdout);
}
#endif

struct girl
{
	int a;int b;	
};

int N,M;
#define MAXN (100001)
int T[MAXN];          // 1 ok. 2 no. 0:wpt
girl gs[MAXN];

void rd()
{
	int i;
	scanf("%d %d", &N, &M);
	for(i = 1; i <= M; i++)
		scanf("%d %d", &gs[i].a, &gs[i].b);
}

bool chk(int id, int c)
{
	int i;
	if(T[id] == 0)
	{
		T[id] = c;
		return true;
	}else if(T[id] != c) 
	{
		return false;
	}
	return true;
}

void dfs(int n)
{
	int i;
	int f;
	if(n > M)
	{
		for(i = 1; i <= N; i++)
		{
			if(T[i] == 1)printf("1 ");
			else printf("0 ");
		}
		printf("\n");
		exit(0);
	}
	
	i = T[abs(gs[n].a)];
	f = 1;
	if(gs[n].a < 0)f = 2;  //先试着使得 a 成立 
	if(chk(abs(gs[n].a), f))
	{
		dfs(n+1);
		T[abs(gs[n].a)] = i;   //回溯 
	}
	
	i = T[abs(gs[n].b)];		//再试着使得 b 成立 
	f = 1;
	if(gs[n].b < 0)f = 2;  
	if(chk(abs(gs[n].b), f))
	{
		dfs(n+1);
		T[abs(gs[n].b)] = i;
	}
	
}

void solve()
{
	dfs(1);
}

int main()
{
#ifndef dbg
	set_file();
#endif

	rd();
	solve();
	
	return 0;
}