Pagini recente » Cod sursa (job #2447009) | Cod sursa (job #2867126) | Cod sursa (job #233610) | Cod sursa (job #1610689) | Cod sursa (job #801577)
Cod sursa(job #801577)
#include<stdio.h>
#include<vector>
#define maxn 200005
#define pb push_back
using namespace std;
FILE*f=fopen("andrei.in","r");
FILE*g=fopen("andrei.out","w");
int n,m;
int st[maxn],viz[maxn],sol[maxn];
vector<int>G[maxn],Gt[maxn];
inline int NOT ( const int &x ){
if ( x <= n ){
return n+x;
}
return x-n;
}
inline void muchie ( int x , int y ){
if ( x < 0 ){
x = n-x;
}
if ( y < 0 ){
y = n-y;
}
G[NOT(x)].pb(y); G[NOT(y)].pb(x);
Gt[y].pb(NOT(x)); Gt[x].pb(NOT(y));
}
void dfs1 ( int nod ){
viz[nod] = 1;
for ( vector<int>::iterator itt = G[nod].begin() ; itt != G[nod].end() ; ++itt ){
int next = (*itt);
if ( !viz[next] ){
dfs1(next);
}
}
st[++st[0]] = nod;
}
void dfs2 ( int nod ){
viz[nod] = viz[NOT(nod)] = 1;
sol[NOT(nod)] = 1;
for ( vector<int>::iterator itt = Gt[nod].begin() ; itt != Gt[nod].end() ; ++itt ){
int next = (*itt);
if ( !viz[next] ){
dfs2(next);
}
}
}
int main () {
fscanf(f,"%d %d",&n,&m);
int x,y,tip;
for ( int i = 1 ; i <= m ; ++i ){
fscanf(f,"%d %d %d",&x,&y,&tip);
if ( !tip ){
muchie(x,y);
}
else{
if ( tip == 1 ){
muchie(-x,-y);
}
else{
muchie(-x,y);
muchie(x,-y);
}
}
}
for ( int i = 1 ; i <= (n<<1) ; ++i ){
if ( !viz[i] ){
dfs1(i);
}
}
for ( int i = 1 ; i <= (n<<1) ; ++i ){
viz[i] = 0;
}
for ( int i = (n<<1) ; i >= 1 ; --i ){
int nod = st[i];
if ( !viz[nod] ){
dfs2(nod);
}
}
for ( int i = 1 ; i <= n ; ++i ){
fprintf(g,"%d ",sol[i]);
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}