Pagini recente » Cod sursa (job #2742353) | Cod sursa (job #2750318) | Cod sursa (job #2067879) | Cod sursa (job #2562731) | Cod sursa (job #1937145)
#include <bits/stdc++.h>
using namespace std;
fstream in ( "andrei.in" , ios::in );
fstream out( "andrei.out", ios::out );
const int DIM = 2e5 + 5;
vector<int> edg[DIM], stk;
int low[DIM], lev[DIM], ans[DIM];
inline int f( int x, int n ) {
return ( x <= n ) ? ( x + n ) : ( x - n );
}
void dfs( int x, int n, int &dt ) {
low[x] = lev[x] = ++ dt;
stk.push_back( x );
for( int y : edg[x] ) {
if( lev[y] == 0 )
dfs( y, n, dt );
if( lev[y] > 0 )
low[x] = min( low[x], low[y] );
}
if( low[x] == lev[x] ) {
int y;
do {
y = stk.back();
stk.pop_back();
lev[y] *= -1;
if( ans[y] == 0 ) {
ans[y] = 1;
ans[f(y, n)] = -1;
}
} while( x != y );
}
return;
}
inline void add( int x, int y, int n ) {
edg[f(x, n)].push_back( y );
edg[f(y, n)].push_back( x );
return;
}
int main( void ) {
ios::sync_with_stdio( false );
int n, m;
in >> n >> m;
for( int i = 1; i <= m; i ++ ) {
int x, y, z;
in >> x >> y >> z;
if( z == 2 ) {
add( f(x, n), y, n );
add( x, f(y, n), n );
}
else if( z == 1 )
add( f(x, n), f(y, n), n );
else if( z == 0 )
add( x, y, n );
}
for( int i = 1, dt = 0; i <= n * 2; i ++ ) {
if( lev[i] == 0 )
dfs( i, n, dt );
}
for( int i = 1; i <= n; i ++ )
out << ( ans[i] > 0 ) << " ";
out << endl;
return 0;
}