Pagini recente » Cod sursa (job #2488304) | Cod sursa (job #937237) | Cod sursa (job #2365870) | Cod sursa (job #657351) | Cod sursa (job #467045)
Cod sursa(job #467045)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
struct muc
{
int x;
char y;
};
vector <muc> v[100006];
char viz[100006],ok,gr[100006];
int n,m;
int verif(int n1,int n2,char stare)
{
if(stare==2 && gr[n1]!=gr[n2])
return 0;
if(!stare && !gr[n1] && !gr[n2])
return 0;
if(stare==1 && gr[n1]==1 && gr[n2]==1)
return 0;
return 1;
}
void dfs(int nod)
{
int nn,i,nr=v[nod].size();
for(i=0;i<nr && ok;i++)
{
nn=v[nod][i].x;
if(viz[nn])
{
if(!verif(nn,nod,v[nod][i].y))
ok=0;
continue;
}
if(v[nod][i].y==2)
{
gr[nn]=gr[nod];
viz[nn]=1;
dfs(nn);
continue;
}
if(!v[nod][i].y && !gr[nod])
{
gr[nn]=1;
viz[nn]=1;
dfs(nn);
continue;
}
if(v[nod][i].y==1 && gr[nod]==1)
{
gr[nn]=0;
viz[nn]=1;
dfs(nn);
}
}
}
int main ()
{
int a,b,c,i;
muc much;
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",&a,&b,&c);
much.x=b;much.y=c;
v[a].push_back(much);
much.x=a;
v[b].push_back(much);
}
viz[1]=1;ok=1;
dfs(1);
if(ok)
{
for(i=1;i<=n;i++)
if(viz[i])
printf("%d ",gr[i]);
else
printf("0 ");
printf("\n");
return 0;
}
memset(gr,0,sizeof(gr));
memset(viz,0,sizeof(viz));
gr[1]=1;ok=1;viz[1]=1;
dfs(1);
for(i=1;i<=n;i++)
if(viz[i])
printf("%d ",gr[i]);
else
printf("1 ");
printf("\n");
return 0;
}