Pagini recente » Cod sursa (job #2419572) | Cod sursa (job #1582437) | Cod sursa (job #1921188) | Cod sursa (job #921359) | Cod sursa (job #2790266)
#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) {
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) {
if (used[v]) {
if (color[v] == 0) {
return false;
}
} else {
dfs(v, 1);
}
}
} else if (c == 1) {
if (col == 1) {
if (used[v]) {
if (color[v] == 1) {
return false;
}
} else {
dfs(v, 0);
}
}
} else {
if (used[v]) {
if (color[v] == color[u]) {
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;
}
dfs(i, 0);
}
}
}
for (int i = 0; i < n; i++) {
out << !color[i] << " ";
}
return 0;
}