Pagini recente » Cod sursa (job #2268970) | Cod sursa (job #1950924) | Cod sursa (job #1790049) | Cod sursa (job #1461941) | Cod sursa (job #479766)
Cod sursa(job #479766)
#include <cstdio>
#include <cstring>
#include <vector>
const int maxN = 200100;
using namespace std;
int N, M;
vector <int> G[maxN];
int parc[maxN], ctc[maxN];
bool viz[maxN];
inline int neg(int nod) {
int r = nod + N;
if (r > 2 * N) r -= 2 * N;
return r;
}
inline void dfs(int nod) {
int i, fiu;
if (viz[nod]) return;
viz[nod] = 1;
for (i = 0; i < G[nod].size(); i++) {
fiu = G[nod][i];
dfs(fiu);
}
parc[++parc[0]] = nod;
}
inline void dfs2(int nod) {
int i, fiu;
if (viz[nod]) return;
viz[nod] = 1;
ctc[neg(nod)] = 1;
for (i = 0; i < G[nod].size(); i++) {
fiu = G[nod][i];
dfs2(fiu);
}
}
int main() {
int i, j, a, b, c;
freopen("andrei.in", "r", stdin);
freopen("andrei.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= N; i++) {
scanf("%d%d%d", &a, &b, &c);
if (c == 0) {
G[a + N].push_back(b);
G[b + N].push_back(a);
}
if (c == 1) {
G[a].push_back(b + N);
G[b].push_back(a + N);
}
if (c == 2) {
G[a].push_back(b);
G[a + N].push_back(b + N);
G[b].push_back(a);
G[b + N].push_back(a + N);
}
}
for (i = 1; i <= 2 * N; i++)
if (!viz[i])
dfs(i);
memset(viz, 0, sizeof(viz));
for (i = 2 * N; i > 0; i--)
if (!viz[parc[i]] && !viz[neg(parc[i])])
dfs2(parc[i]);
for (i = 1; i <= N; i++)
printf("%d ", ctc[i]);
return 0;
}