Pagini recente » Cod sursa (job #651523) | Cod sursa (job #3238425) | Cod sursa (job #1252386) | Cod sursa (job #584458) | Cod sursa (job #479781)
Cod sursa(job #479781)
#include <cstdio>
#include <cstring>
#include <vector>
const int maxN = 200100;
using namespace std;
int N, M;
vector <int> G[maxN], GT[maxN];
int st[maxN], value[maxN];
bool viz[maxN];
inline int neg(int val) { return val > N ? val - N : val + N; }
void df(int nod) {
viz[nod] = true;
for (vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++it)
if (!viz[*it]) df(*it);
st[++st[0]] = nod;
}
void df2(int nod) {
viz[nod] = true;
value[neg(nod)] = true;
for (vector<int>::iterator it = GT[nod].begin(); it != GT[nod].end(); ++it)
if (!viz[*it]) df2(*it);
}
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);
GT[b].push_back(a + N);
GT[a].push_back(b + N);
}
if (c == 1) {
G[a].push_back(b + N);
G[b].push_back(a + N);
GT[b + N].push_back(a);
GT[a + N].push_back(b);
}
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);
GT[a].push_back(b);
GT[b].push_back(a);
GT[a + N].push_back(b + N);
GT[b + N].push_back(a + N);
}
}
for (int i = 1; i <= 2*N; ++i)
if (!viz[i]) df(i);
memset(viz, false, sizeof(viz));
for (int i = 2*N; i; --i)
if (!viz[st[i]] && !viz[neg(st[i])])
df2(st[i]);
for (int i = 1; i <= N; ++i)
printf("%d ", value[i]);
return 0;
}