Pagini recente » Cod sursa (job #662668) | Cod sursa (job #1819699) | Cod sursa (job #1619558) | Cod sursa (job #937233) | Cod sursa (job #1937122)
#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;
}
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;
switch( z ) {
case 0:
edg[f(x, n)].push_back( y );
edg[f(y, n)].push_back( x );
break;
case 1:
edg[x].push_back( f(y, n) );
edg[y].push_back( f(x, n) );
break;
case 2:
edg[x].push_back( y );
edg[y].push_back( x );
break;
}
}
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;
}