Pagini recente » Cod sursa (job #1513452) | Cod sursa (job #400508) | Cod sursa (job #322177) | Cod sursa (job #62101) | Cod sursa (job #1911999)
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
vector< vector< pair<int,int> > >g(100010);
vector<int> v1;
int v[100010];
bool ok;
void dfs(int node)
{
int i;
if(ok==false)
{
v[node]=0;
return;
}
v1.push_back(node);
for(i=0;i<g[node].size();i++)
{
if(v[node]==1 && v[g[node][i].first]==1 && g[node][i].second==0)
{
ok=0;
return;
}
if(v[node]==2 && v[g[node][i].first]==2 && g[node][i].second==1)
{
ok=0;
return;
}
if(v[node]==2 && v[g[node][i].first]==1 && g[node][i].second==2)
{
ok=0;
return;
}
if(v[node]==1 && v[g[node][i].first]==2 && g[node][i].second==2)
{
ok=0;
return;
}
if(v[g[node][i].first]==0)
{
if(g[node][i].second==0 && v[node]==1)
{
v[g[node][i].first]=2;
dfs(g[node][i].first);
}
else if(g[node][i].second==1 && v[node]==2)
{
v[g[node][i].first]=1;
dfs(g[node][i].first);
}
else if(g[node][i].second==2 && v[node]==2)
{
v[g[node][i].first]=1;
dfs(g[node][i].first);
}
else if(g[node][i].second==2 && v[node]==1)
{
v[g[node][i].first]=1;
dfs(g[node][i].first);
}
}
}
}
int main()
{
srand(time(0));
freopen("andrei.in","r",stdin);
freopen("andrei.out","w",stdout);
int n,m,i,j,x,y,z;
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));
}
for(i=1;i<=n;i++)
if(v[i]==0)
{
if(rand()%2==0)
{
v[i]=1;
ok=true;
dfs(i);
if(ok==false)
{
x=v1.size()-1;
for(j=x;j>=0;j--)
{
v[v1[j]]=0;
v1.pop_back();
}
v[i]=2;
dfs(i);
}
}
else
{
v[i]=2;
ok=true;
dfs(i);
if(ok==false)
{
x=v1.size()-1;
for(j=x;j>=0;j--)
{
v[v1[j]]=0;
v1.pop_back();
}
v[i]=1;
dfs(i);
}
}
x=v1.size()-1;
for(j=x;j>=0;j--)
v1.pop_back();
}
for(i=1;i<=n;i++)
printf("%d ",v[i]-1);
return 0;
}