Nu aveti permisiuni pentru a descarca fisierul grader_test10.in

Cod sursa(job #467313)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 28 iunie 2010 14:05:13
Problema Andrei Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.54 kb
#include<algorithm>
#include<vector>
#include<stdlib.h>
using namespace std;
#define N_MAX 100005
typedef pair <int,int> p;
vector <p> a[N_MAX];
int ut[N_MAX];
int mul[N_MAX];
int i,cate,n,m;

int PRINT(int nod)
{
	vector <p> ::iterator it;
	for(it=a[nod].begin();it!=a[nod].end();it++)
			if(it->first==i)
				if(mul[nod]==0&&mul[i]==0)
				{
					if(it->second==0)
						return 0;
				}
				else
					if(mul[nod]==1&&mul[i]==1)
					{
						if(it->second==1)
							return 0;
					}
					else
						if(it->second==2)
							return 0;
	if(find(ut+1,ut+n+1,0)==(ut+n+1))
	{
		for(int j=1;j<=n;j++)
			printf("%d ",mul[j]);
		exit(0);
	}else
		return 1;
}
void dfs(int prev,int nod)
{
	ut[nod]=1;
	vector <p> ::iterator it;
	for(int m=0;m<2;m++)
	{
		mul[nod]=m;
		int ok=1;
		for(it=a[prev].begin();it!=a[prev].end();it++)
		{
			if(it->first==nod)
				if(mul[prev]==0&&mul[nod]==0)
				{
					if(it->second==0)
						ok=0 ;
				}
				else
					if(mul[prev]==1&&mul[nod]==1)
					{
						if(it->second==1)
							ok=0 ;
					}
					else
						if(it->second==2)
							ok=0 ;
		}
		if(ok==0)
			continue;
		ok=0;
		for(it=a[nod].begin();it!=a[nod].end();it++)
			if(!ut[it->first])
				dfs(nod,it->first);
		PRINT(nod);
	}
	ut[nod]=0;
}

int main()
{
	freopen("andrei.in","r",stdin);
	freopen("andrei.out","w",stdout);

	scanf("%d%d",&n,&m);

	for(i=1;i<=m;i++)
	{
		int x,y,c;
		scanf("%d%d%d",&x,&y,&c);
		a[x].push_back(p(y,c));
		a[y].push_back(p(x,c));
	}
	dfs(0,1);
	return 0;
}