Cod sursa(job #471855)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 21 iulie 2010 14:35:44
Problema Andrei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#include <vector>
#define Nmax 100002
#define Mmax 200002
#define x first
#define c second
#define pb push_back
#define mp make_pair
using namespace std;

vector< pair<int,int> > v[Nmax];
vector< int > v2;
int cul[Nmax],use[Nmax];
int n,m;

int color(int cine, int c){
	vector< pair<int,int> >:: iterator it;
	if( use[cine] )
		if( cul[cine]==c ) return 1;
		else return 0;
	use[cine]=1;
	cul[cine]=c;
	
	for(it=v[cine].begin(); it!=v[cine].end(); ++it)
		if( it->c == 2 && !color(it->x,c) )
			return 0; else
		if( !color(it->x,c^1) )
			return 0;
	
	return 1;
}

int main(){
	int i,x,y,c;
	vector< int >:: iterator it;

	freopen("andrei.in","r",stdin);
	freopen("andrei.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;++i){
		scanf("%d%d%d",&x,&y,&c);
		v[x].pb(mp(y,c));
		v[y].pb(mp(x,c));
	}
	
	for(i=1;i<=n;++i)
		if( ! use[i] ){
			v2.clear();
			if( ! color(i,0) ){
				for(it=v2.begin(); it!=v2.end(); ++it)
					use[*it]=0;
				color(i,1);
			}
		}
	
	for(i=1;i<=n;++i) printf("%d ",cul[i]);
	fclose(stdin); fclose(stdout);
	return 0;
}