Cod sursa(job #467124)

Utilizator rusu_raduRusu Radu rusu_radu Data 28 iunie 2010 11:57:36
Problema Andrei Scor 50
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.84 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cassert>
#define Nmax 100005
#define InFile "andrei.in"
#define OutFile "andrei.out"

using namespace std;

int n, m;
int G[Nmax];
struct Muchie {int fn, sn, cm;} T[2*Nmax];

void read();
void solve();
void write();

int main()
{
    assert (freopen (InFile, "r", stdin));
    freopen (OutFile, "w", stdout);
    read();
    solve();
    write();
    return 0;
}

void read()
{
    int i;
    scanf ("%d %d\n", &n, &m);
    for (i=0; i<m; i++)
        scanf ("%d %d %d\n", &T[i].fn, &T[i].sn, &T[i].cm);
}

void solve()
{
    int i, gata, ver;
    srand (time(NULL));
    for (i=1; i<=n; i++)
        G[i]=rand()%2;
    do
    {
        gata=1;
        for (i=0; i<m; i++)
        {
            //la premier condition
            if (T[i].cm==0 && G[T[i].fn]==G[T[i].sn] && G[T[i].fn]==0)
            {
                ver=rand()%2;
                if (ver==0) G[T[i].fn]=(G[T[i].fn]+1)%2;
                else G[T[i].sn]=(G[T[i].sn]+1)%2;
                gata=0;break;
            }

            //la <a doua>(in franceza) condition
            if (T[i].cm==1 && G[T[i].fn]==G[T[i].sn] && G[T[i].fn]==1)
            {
                ver=rand()%2;
                if (ver==0) G[T[i].fn]=(G[T[i].fn]+1)%2;
                else G[T[i].sn]=(G[T[i].sn]+1)%2;
                gata=0;break;
            }

            //la <a treia>(in franceza) condition
            if (T[i].cm==2 && G[T[i].fn]!=G[T[i].sn])
            {
                ver=rand()%2;
                if (ver==0) G[T[i].fn]=(G[T[i].fn]+1)%2;
                else G[T[i].sn]=(G[T[i].sn]+1)%2;
                gata=0;break;
            }
        }
    }
    while (!gata);
}

void write()
{
    int i;
    for (i=1; i<=n; i++)
        printf ("%d ", G[i]);
    printf ("\n");
}