Cod sursa(job #467326)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 28 iunie 2010 14:16:49
Problema Andrei Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.55 kb
#include<algorithm>
using namespace std;
#include<vector>
#include<bitset>
#include<queue>

#define mp make_pair
#define pb push_back
#define fs first
#define sc second
#define DIM 100005

vector<pair<int,int> > lst[DIM];
bool sol[DIM];
queue<int> q;
int n,m;

inline void solve (int x)
{
    int i,nr;
    q.push(x);
    while(!q.empty ())
    {
        nr=q.front ();
        for(i=0;i<(int)lst[nr].size ();++i)
        {
            if(lst[nr][i].sc==0 && sol[nr]==0 && sol[lst[nr][i].fs]==0)
            {
                sol[lst[nr][i].fs]=1;
                q.push (lst[nr][i].fs);
            }
            if(lst[nr][i].sc==1 && sol[nr]==1 && sol[lst[nr][i].fs]==1)
            {
                sol[lst[nr][i].fs]=0;
                q.push (lst[nr][i].fs);
            }
            if(lst[nr][i].sc==2 && ((sol[nr]==1 && sol[lst[nr][i].fs]==0) ||(sol[nr]==0 && sol[lst[nr][i].fs]==1)))
            {
                if(sol[nr]==1)
                    sol[lst[nr][i].fs]=0;
                else
                    sol[lst[nr][i].fs]=1;
                q.push (lst[nr][i].fs);
            }
        }
        q.pop ();
    }
}
int main ()
{
    freopen("andrei.in","r",stdin);
    freopen("andrei.out","w",stdout);
    int i,nr1,nr2,nr3;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&nr1,&nr2,&nr3);
        lst[nr1].pb(mp(nr2,nr3));
        lst[nr2].pb(mp(nr1,nr3));
    }
    for(i=1;i<=n;++i)
        solve(i);
    for(i=1;i<=n;++i)
        printf("%d ",sol[i]);
    return 0;
}