Pagini recente » Cod sursa (job #1607869) | Cod sursa (job #898991) | Cod sursa (job #1298763) | Cod sursa (job #1644613) | Cod sursa (job #1300466)
#include<cstdio>
#include<vector>
using namespace std;
vector < pair<int, int> > g[100003];
vector < int > visited;
int n,m,i,x,y,z,v[100003];
bool u[100003];
bool dfs(int nod, int p)
{
vector< pair <int, int> >::iterator it;
if(u[nod])
{
if(v[nod]!=p) return 0;
return 1;
}
visited.push_back(nod); u[nod]=true; v[nod]=p;
for(it=g[nod].begin();it!=g[nod].end();++it)
{
if(it->second==0 && p==0)
if(!dfs(it->first, 1)) return 0;
if(it->second==1 && p==1)
if(!dfs(it->first, 0)) return 0;
if(it->second==2)
if(!dfs(it->first, p)) return 0;
}
return 1;
}
int main ()
{
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,&z);
g[x].push_back(make_pair(y, z));
g[y].push_back(make_pair(x, z));
}
vector<int>::iterator it;
for(i=1;i<=n;++i)
if(!u[i])
{
if(!dfs(i,0))
{
for(it=visited.begin();it!=visited.end();++it) u[*it]=false;
dfs(i,1);
}
}
for(i=1;i<=n;++i)
printf("%d ",v[i]);
return 0;
}