Cod sursa(job #729850)

Utilizator veleanduAlex Velea veleandu Data 30 martie 2012 13:29:37
Problema Andrei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

    typedef struct { long a,b,c; } ceva;
    ceva T[200005];
    bool V[100005];
    long n,i,ok,bad,a,b,c,m;

    ifstream in("andrei.in");
    ofstream out("andrei.out");

    bool check ( long vf )
    {
        if ( T[vf].c==0 )
        {
            // sa nu existe vreo muchie colorata in alb intre doua noduri din A;
            if ( V[T[vf].a]==0 && V[T[vf].b]==0)
                return 0;
            return 1;
        }
        if ( T[vf].c==1 )
        {
            //sa nu existe vreo muchie colorata in rosu intre doua noduri din B;
            if ( V[T[vf].a]==1 && V[T[vf].b]==1)
                return 0;
            return 1;
        }
        if ( T[vf].c==2 )
        {
            //sa nu existe vreo muchie colorata in violet intre un nod din A si unul din B.
            if ( V[T[vf].a] != V[T[vf].b] )
                return 1;
            return 0;
        }
    }

int main()
{
    in>>n>>m;
    for ( i=1; i<=m; i++ )
    {
        in>>a>>b>>c;
        T[i].a=a;
        T[i].b=b;
        T[i].c=c;
    }
    ok=1;
    while ( ok )
    {
        // verificam
        ok=0;
        for ( i=1; i<=m&&!ok; i++ )
        {
            if ( !check(i) )
            {
                bad=i;
                ok=1;
            }
        }
        if ( ok )
        {
            a=rand()%2;
            if ( a )
                V[T[bad].a]++,V[T[bad].a]%=2;
            else
                V[T[bad].b]++,V[T[bad].b]%=2;
        }
    }
    for ( i=1; i<=n; i++ )
        out<<V[i]<<" ";
}