比赛 “Asm.Def战记之夏威夷”杯 评测结果 WWWWAWWWWW
题目名称 Asm.Def的报告 最终得分 10
用户昵称 fengchenxue 运行时间 0.347 s
代码语言 C++ 内存使用 4.13 MiB
提交时间 2015-11-06 10:44:14
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<cstring>
#include<string>
#include<cstdlib>
#include<set>
#include<map>
using namespace std;
struct str{
	vector<int>tr;
	vector<int>fa;
	int a1,a2;
	int ding;
	bool ok;
}f[100010];
int n,m;
void fun(int x,int y){
	int a;int b;
	f[x].ok=1;
	if(f[x].a1<0) a=-f[x].a1;
	else a=f[x].a1;
	if(f[x].a2<0) b=-f[x].a2;
	else b=f[x].a2;
	if(a==y&&!f[b].ding)
	{
		
		if(f[x].a2>0){
			f[b].ding=1;
			fun(b,x);
		}
		else{
			f[b].ding=-1;
			fun(b,x);
		}
	}
	if(b==y&&!f[a].ding){
		if(f[x].a1>0){
			f[a].ding=1;
			fun(a,x);
		}
		else{
			f[a].ding=-1;
			fun(a,x);
		}
	}
}
int main(){
	freopen("asm_report.in","r",stdin);
	freopen("asm_report.out","w",stdout);
	cin>>n>>m;
	int u1,u2;
	for(int i=1;i<=m;i++){
		cin>>u1>>u2;
		f[i].a1=u1;
		f[i].a2=u2;
		if(u1==u2){
			if(u1>0) f[u1].ding=1;
			else f[-u1].ding=-1;
			f[i].ok=1;
			continue;
		}
		int a,b;
		if(u1>0) a=u1;
		else a=-u1;
		
		if(u2>0) b=u2;
		else b=-u2;
		
			if(f[a].ding||f[b].ding)
			{
				if(f[a].ding)
				{
					if(f[a].ding==1)
					{
						if(u1>0){
							f[i].ok=1;
							continue;
						}
						else{
							if(u2>0){
								f[u2].ding=1;
								f[i].ok=1;
								continue;
							}
							else{
								f[-u2].ding=-1;
								f[i].ok=1;
								continue;
								
							}
						}
					}
					else
					{
						if(u1<0){
							f[i].ok=1;
							continue;
						}
						else
						{
							if(u2>0){
								f[u2].ding=1;
								f[i].ok=1;
								continue;
							}
							else{
								f[-u2].ding=-1;
								f[i].ok=1;
								continue;
								
							}
						}
					}
				}
				if(f[b].ding)
				{
					if(f[b].ding==1)
					{
						if(u2>0){
							f[i].ok=1;
							continue;
						}
						else{
							if(u1>0){
								f[u1].ding=1;
								f[i].ok=1;
								continue;
							}
							else{
								f[-u1].ding=-1;
								f[i].ok=1;
								continue;
								
							}
						}
					}
					else
					{
						if(u2<0){
							f[i].ok=1;
							continue;
						}
						else
						{
							if(u1>0){
								f[u1].ding=1;
								f[i].ok=1;
								continue;
							}
							else{
								f[-u1].ding=-1;
								f[i].ok=1;
								continue;
								
							}
						}
					}
				}
				
				
		    }
		if(u1>0)
		{
		    f[a].tr.push_back(i);
			
		}
		else
		{
			f[a].fa.push_back(i);
		}
		if(u2>0)
		{
			f[b].tr.push_back(i);
		}
		else{
			f[b].fa.push_back(i);
		}		
				
	}
	for(int i=1;i<=m;i++)
	{
		if(f[i].ding)
		{
			while(f[i].tr.empty()==0)
			{
			int a=f[i].tr.back();
			f[i].tr.pop_back();
			fun(a,i);
		    }
			while(f[i].fa.empty()==0)
			{
				int a=f[i].fa.back();
				f[i].fa.pop_back();
				fun(a,i);
	        }
		}
	}
	for(int i=1;i<=n;i++)
	{
	/*	if(f[i].ok)
		{
		int a;int b;
	//f[x].ok=1;
	if(f[x].a1<0) a=-f[x].a1;
	else a=f[x].a1;
	if(f[x].a2<0) b=-f[x].a2;
	else b=f[x].a2;
	if(!f[a].ding)
	{
		if(a1>0){
			fa[]
		}
	}
		}
	}
	*/
	if(f[i].ding==1) cout<<"1"<<" ";
	else cout<<"0"<<" ";		
		
}
}