Pagini recente » Rating Toma Adrian (spyke) | Cod sursa (job #1265637) | Cod sursa (job #193739) | Cod sursa (job #1658748) | Cod sursa (job #2001077)
#include<bits/stdc++.h>
using namespace std;
ifstream in("andrei.in");
ofstream out("andrei.out");
const int NMAX = 100005;
vector<int> G[2*NMAX];
vector<int> GT[2*NMAX];
int N,M,viz[2*NMAX],ctc[2*NMAX],st[2*NMAX],nr_ctc,sz;
int ind(int a)
{
if(a > 0)
return 2*a-1;
else
return -2*a;
}
void adauga(int x,int y)
{
G[ind(-x)].push_back(ind(y));
G[ind(-y)].push_back(ind(x));
GT[ind(y)].push_back(ind(-x));
GT[ind(x)].push_back(ind(-y));
}
void dfs(int nod)
{
viz[nod] = 1;
for(vector<int>::iterator it = G[nod].begin() ; it != G[nod].end() ; ++it)
if(!viz[*it])
dfs(*it);
st[++sz] = nod;
}
void comp(int nod)
{
viz[nod] = 0;
ctc[nod] = nr_ctc;
for(vector<int>::iterator it = GT[nod].begin() ; it != GT[nod].end() ; ++it)
if(viz[*it])
comp(*it);
}
int main()
{
in>>N>>M;
int a,b,c;
for(int i = 1 ; i <= M ; ++i){
in>>a>>b>>c;
if(c == 0)
adauga(a,b);
else if(c == 1)
adauga(-a,-b);
else{
adauga(-a,b);
adauga(a,-b);
}
}
for(int i = 1 ; i <= 2*N ; ++i)
if(!viz[i])
dfs(i);
for(int i = 2 * N ; i > 0 ; --i)
if(viz[st[i]]){
nr_ctc++;
comp(st[i]);
}
for(int i = 1 ; i <= N ; ++i)
out<<(ctc[ind(i)] < ctc[ind(-i)])<<" ";
return 0;
}