Cod sursa(job #1300401)

Utilizator gapdanPopescu George gapdan Data 24 decembrie 2014 13:41:09
Problema Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<cstdio>
#include<vector>
#define NMAX 100005
using namespace std;
int n,m,i,x,y,c;
int viz[NMAX],sol[NMAX];
struct muchie
{
    int l,r;
};
vector<muchie>v[NMAX];
vector<int>mul;
muchie pp(int x,int y)
{
    muchie X;
    X.l=x;X.r=y;
    return X;
}
bool DFS(int nod,int nr)
{
    if (viz[nod]==1)
        if (sol[nod]!=nr) return 0;
            else return 1;
    viz[nod]=1;
    sol[nod]=nr;
    mul.push_back(nod);
    vector<muchie>::iterator it;
    for (it=v[nod].begin();it!=v[nod].end();++it)
    {
        muchie X=*it;
       if (X.r==0 && sol[nod]==0)
           if (DFS(X.l,1)==0) return 0;
       if (X.r==1 && sol[nod]==1)
           if (DFS(X.l,0)==0) return 0;
       if (X.r==2)
           if (DFS(X.l,nr)==0) 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,&c);
        v[x].push_back(pp(y,c));
        v[y].push_back(pp(x,c));
    }
    for (i=1;i<=n;++i)
    {
        if (viz[i]==0)
        {
            if (DFS(i,0)==0)
            {
                vector<int>::iterator it;
                for (it=mul.begin();it!=mul.end();++it) viz[*it]=0;
                DFS(i,1);
            }
        }
    }
    for (i=1;i<=n;++i) printf("%d ",sol[i]);
    return 0;
}