Pagini recente » Cod sursa (job #2169890) | Cod sursa (job #1129397) | Cod sursa (job #1650507) | Cod sursa (job #3267461) | Cod sursa (job #474155)
Cod sursa(job #474155)
#include <algorithm>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstring>
#include <ctime>
#include <bitset>
#include <deque>
#include <fstream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef bool int01;
typedef char cha08;
typedef short int int16;
typedef int int32;
typedef float rea32;
typedef long long int int64;
typedef double rea64;
const cha08 Input[] = "andrei.in";
const cha08 Output[] = "andrei.out";
const int32 Dim = 100001;
int32 N, M;
int32 f[Dim], m[Dim];
vector < pair <int32, int32> > v[Dim];
inline int32 Fort( int32 mul, int32 muc ) {
if( mul == 1 ) {
if( muc == 0 )
return 2;
if( muc == 2 )
return 1;
}
if( mul == 2 ) {
if( muc == 1 )
return 1;
if( muc == 2 )
return 2;
}
return 0;
}
inline int01 Cont( int32 mul0, int32 mul1, int32 muc ) {
if( Fort( mul0, muc ) && Fort( mul0, muc ) != mul1 )
return 0;
return 1;
}
int01 Check( int32 nod, int32 mul ) {
int01 ok;
vector < pair <int32, int32> > :: iterator it;
if( !mul )
return 1;
ok = true;
f[nod] = 2;
m[nod] = mul;
for( it = v[nod].begin(); it != v[nod].end(); ++it ) {
if( !f[it->first] )
ok &= Check( it->first, Fort( mul, it->second ) );
else
ok &= Cont( mul, m[it->first], it->second );
}
return ok;
}
void DF( int32 nod ) {
vector < pair <int32, int32> > :: iterator it;
f[nod] = 1;
for( it = v[nod].begin(); it != v[nod].end(); ++it )
if( f[it->first] != 1 && Fort( m[nod], it->second ) ) {
m[it->first] = Fort( m[nod], it->second );
DF( it->first );
}
}
int32 main() {
ifstream fin( Input );
ofstream fout( Output );
int32 i, a, b, c;
fin >> N >> M;
while( M-- ) {
fin >> a >> b >> c;
v[a].push_back( make_pair( b, c ) );
v[b].push_back( make_pair( a, c ) );
}
for( i = 1; i <= N; ++i )
if( !m[i] ) {
if( Check( i, 1 ) )
m[i] = 1;
else
m[i] = 2;
DF( i );
}
for( i = 1; i <= N; ++i )
fout << --m[i] << " ";
fin.close();
fout.close();
return 0;
}