Cod sursa(job #608144)

Utilizator SpiderManSimoiu Robert SpiderMan Data 15 august 2011 11:44:02
Problema Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
# include <algorithm>
# include <cstdio>
# include <cstring>
# include <vector>
using namespace std;

# define verf ++poz == hg ? fread ( ch, 1, hg, stdin ), poz = 0 : 0

const char *FIN = "andrei.in", *FOU = "andrei.out";
const int MAX = 200005, hg = 1 << 13;

int N, M, poz;
vector <int> GP[MAX], GM[MAX], Q;
bool VIZ[MAX], sol[MAX];

inline int NOT (int A) {
    return A > N ? A - N : A + N;
}

char ch[ hg ] ;

inline void cit ( int &x ) {
    if ( ch[0] == '\0' ) fread ( ch, 1, hg, stdin ) ;
    else for ( ; ch[poz] < '0' || ch[poz] > '9' ; verf ) ;
    for ( x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf ) ;
}

void dfp (int S) {
    VIZ[S] = 1;
    for (vector <int> :: iterator it = GP[S].begin (); it != GP[S].end (); ++it)
        if (VIZ[*it] == 0)
            dfp (*it);
    Q.push_back (S);
}

void dfm (int S) {
    VIZ[S] = sol[NOT(S)] = 1;
    for (vector <int> :: iterator it = GM[S].begin (); it != GM[S].end (); ++it)
        if (VIZ[*it] == 0)
            dfm (*it);
}

void baga (int x, int y) {
    GP[NOT (x)].push_back (y);
    GP[NOT (y)].push_back (x);
    GM[x].push_back (NOT (y));
    GM[y].push_back (NOT (x));
}

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    cit (N), cit (M);
    for (int i = 1, x, y, z; i <= M; ++i) {
        cit (x), cit (y), cit (z);
        if (z == 0) baga (x, y);
        else if (z == 1) baga (NOT (x), NOT (y));
        else baga (NOT (x), y), baga (x, NOT (y));
    }
    for (int i = 1; i <= N << 1; ++i)
        if (VIZ[i] == 0)
            dfp (i);
    memset (VIZ, 0, sizeof (VIZ)), reverse (Q.begin (), Q.end ());
    for (vector <int> :: iterator it = Q.begin (); it != Q.end (); ++it)
        if (VIZ[*it] == 0 && VIZ[NOT (*it)] == 0)
            dfm (*it);
    for (int i = 1; i <= N; ++i)
        printf ("%d ", sol[i]);
}