Pagini recente » Cod sursa (job #2306851) | Cod sursa (job #1195676) | Cod sursa (job #740377) | Cod sursa (job #1147491) | Cod sursa (job #467313)
Cod sursa(job #467313)
#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;
}