Cod sursa(job #467227)

Utilizator cosmyoPaunel Cosmin cosmyo Data 28 iunie 2010 13:16:37
Problema Andrei Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.95 kb
#include<cstdio>
#include<list>
using namespace std;
long n,a,b,c,v[100005],q,m;
list<long> L[100005],C[100005],x,y;
list<long>::iterator it,it1,it2,itc;
int main()
{freopen("andrei.in","r",stdin);
  scanf("%ld%ld",&n,&m);
  long i; 
   for(i=1;i<=m;++i)
   {scanf("%ld%ld%ld",&a,&b,&c);
    if(c==2)
	{++q;
	 x.push_back(a);
	 y.push_back(b);
	}
	else
	{
    L[a].push_back(b);
	L[b].push_back(a);
	C[a].push_back(c);
	C[b].push_back(c);
	}
   }
 fclose(stdin);
 freopen("andrei.out","w",stdout); 
  long ok=1;
  for(i=0;i<=100001;++i)
	  v[i]=-1;
   for(it1=x.begin(),it2=y.begin();it1!=x.end();++it1,++it2)
   {v[*it1]=0;v[*it2]=0;
    for(it=L[*it1].begin(),itc=C[*it1].begin();it!=L[*it1].end();++it,++itc)
	 {if(v[*it]==-1)
		 if(*itc==0)
			 v[*it]=1;
		 else
			 v[*it]=0;
		 else
			 if(v[*it]!=*itc)
			 {ok=0;
			  break;
			 }
	 }
	 for(it=L[*it2].begin(),itc=C[*it2].begin();it!=L[*it2].end();++it,++itc)
	 {if(v[*it]==-1)
		 if(*itc==0)
			 v[*it]=1;
		 else
			 v[*it]=0;
		 else
			 if(v[*it]!=*itc)
			 {ok=0;
			
			  break;
			 }
	 }
	 if(ok==0)
		 break;
   }
   
  if(ok==0)
  {ok=2;
   for(i=0;i<=100001;++i)
	  v[i]=-1;
   for(it1=x.begin(),it2=y.begin();it1!=x.end();++it1,++it2)
   {v[*it1]=1;v[*it2]=1;
    for(it=L[*it1].begin(),itc=C[*it1].begin();it!=L[*it1].end();++it,++itc)
	 {if(v[*it]==-1)
		 if(*itc==1)
			 v[*it]=0;
		 else
			 v[*it]=1;
		 else
			 if(v[*it]!=*itc)
			 {ok=-1;
			  break;
			 }
	 }
	 for(it=L[*it2].begin(),itc=C[*it2].begin();it!=L[*it2].end();++it,++itc)
	 {if(v[*it]==-1)
		 if(*itc==0)
			 v[*it]=1;
		 else
			 v[*it]=0;
		 else
			 if(v[*it]!=*itc)
			 {ok=-1;
			  break;
			 }
	 }
	 if(ok==-1)
		 break;
   }
  }
 for(it=L[i].begin(),itc=C[i].begin();it!=L[i].end();++it,++itc)
  if(v[*it]==-1)
   if(v[i]==0)
	   v[*it]=1;
   else
	   v[*it]=0;
  for(i=1;i<=n;++i)
	printf("%ld ",v[i]);
 fclose(stdout);
 return 0;
  }