Pagini recente » Cod sursa (job #2121177) | Cod sursa (job #1209651) | Cod sursa (job #2828243) | Cod sursa (job #2627997) | Cod sursa (job #467709)
Cod sursa(job #467709)
#include <cstdio>
#include <cassert>
#include <vector>
using namespace std;
#define MAXN 100000
#define MAXM 200000
int N, M;
char set[MAXN + 1]; int col[MAXN + 1];
vector<pair<int, int> > con[MAXN + 1];
vector<int> st;
inline int color(int nod, int c) {
st.push_back(nod);
if (set[nod]) {
return col[nod] == c;
}
col[nod] = c;
set[nod] = 1;
vector<pair<int, int> > :: iterator it;
for (it = con[nod].begin(); it != con[nod].end(); it++) {
if (it->second == 0 && col[nod] == 0) {
if (!color(it->first, 1)) {
set[nod] = 0;
return 0;
}
}
if (it->second == 1 && col[nod] == 1) {
if (!color(it->first, 0)) {
set[nod] = 0;
return 0;
}
}
if (it->second == 2) {
if (!color(it->first, col[nod])) {
set[nod] = 0;
return 0;
}
}
}
return 1;
}
int main() {
freopen("andrei.in", "rt", stdin);
freopen("andrei.out", "wt", stdout);
assert(scanf("%d %d", &N, &M) == 2);
assert(1 <= N && N <= MAXN);
assert(1 <= M && M <= MAXM);
for (int i = 0; i < M; i++) {
int x, y, c;
assert(scanf("%d %d %d", &x, &y, &c) == 3);
con[x].push_back(make_pair(y, c));
con[y].push_back(make_pair(x, c));
}
for (int i = 1; i <= N; i++) {
if (!set[i]) {
st.clear();
if (!color(i, 0)) {
for (size_t k = 0; k < st.size(); k++) {
set[st[k]] = 0;
}
color(i, 1);
}
}
}
for (int i = 1; i <= N; i++) {
printf("%d ", col[i]);
}
printf("\n");
return 0;
}