Pagini recente » Cod sursa (job #3162734) | Cod sursa (job #919323) | Cod sursa (job #2921512) | Cod sursa (job #2918539) | Cod sursa (job #467201)
Cod sursa(job #467201)
#include <fstream>
#include <vector>
#include <cstdlib>
#include <cstring>
using namespace std;
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
const int MAX_N = 100005;
const int MAX_M = 200005;
ifstream fin ("andrei.in");
ofstream fout ("andrei.out");
int N, M, cul[MAX_N];
vector <pair<int, int> > G[MAX_N];
char viz[MAX_N];
void citire() {
fin >> N >> M;
for(int i = 1; i <= M; ++i) {
int a, b, c;
fin >> a >> b >> c;
G[a].push_back(make_pair(b, c));
G[b].push_back(make_pair(a, c));
}
}
int dfs(int nod) {
int ans = 1;
foreach(G[nod]) {
if(cul[nod] == 0) {
if(cul[it -> first] == 1) {
if(it -> second == 2)
return 0;
}
if(cul[it -> first] == 0) {
if(it -> second == 0)
return 0;
}
if(cul[it -> first] == -1) {
if(it -> second == 0) {
cul[it -> first] = 1;
ans &= dfs(it -> first);
}
if(it -> second == 1) {
cul[it -> first] = rand() & 1;
ans &= dfs(it -> first);
}
if(it -> second == 2) {
cul[it -> first] = 0;
ans &= dfs(it -> first);
}
}
} else {
if(cul[it -> first] == 1) {
if(it -> second == 1)
return 0;
}
if(cul[it -> first] == 0) {
if(it -> second == 2)
return 0;
}
if(cul[it -> first] == -1) {
if(it -> second == 0) {
cul[it -> first] = rand() & 1;
ans &= dfs(it -> first);
}
if(it -> second == 1) {
cul[it -> first] = 0;
ans &= dfs(it -> first);
}
if(it -> second == 2) {
cul[it -> first] = 1;
ans &= dfs(it -> first);
}
}
}
}
return 1;
}
void solve() {
for(int i = 1; i <= N; ++i) {
for(int c = 0; c < 2; ++c) {
memset(cul, -1, sizeof cul);
memset(viz, 0, sizeof viz);
cul[i] = c;
if(dfs(i)) {
bool ok = true;
for(int i = 1; i <= N; ++i)
if(cul[i] == -1)
ok = false;
if(ok) {
for(int i = 1; i <= N; ++i)
fout << cul[i] << " ";
return;
}
}
}
}
}
int main() {
citire();
solve();
}