Pagini recente » Cod sursa (job #1468355) | Cod sursa (job #2261361) | Cod sursa (job #1105796) | Cod sursa (job #2198908) | Cod sursa (job #2790273)
#include <bits/stdc++.h>
using namespace std;
ifstream in("andrei.in");
ofstream out("andrei.out");
const int maxN = (int)1e5;
int n, m;
vector<pair<int, int>> g[maxN];
bool used[maxN];
bool color[maxN];
vector<int> visited;
bool dfs(int u, int col) {
if (used[u]) {
return (bool)col == color[u];
}
color[u] = col;
used[u] = true;
visited.push_back(u);
for (pair<int, int> pi : g[u]) {
int v = pi.first, c = pi.second;
if (c == 0) {
if (col == 0 && !dfs(v, 1)) {
return false;
}
} else if (c == 1) {
if (col == 1 && !dfs(v, 0)) {
return false;
}
} else {
if (!dfs(v, col)) {
return false;
}
}
}
return true;
}
int main() {
in >> n >> m;
for (int i = 0; i < m; i++) {
int u, v, z;
in >> u >> v >> z;
u--; v--;
g[u].emplace_back(v, z);
g[v].emplace_back(u, z);
}
for (int i = 0; i < n; i++) {
if (!used[i]) {
visited.clear();
if (!dfs(i, 1)) {
for (int u : visited) {
used[u] = false;
}
visited.clear();
assert(dfs(i, 0));
}
}
}
for (int i = 0; i < n; i++) {
out << color[i] << " ";
}
return 0;
}