Pagini recente » Cod sursa (job #135222) | Cod sursa (job #2253897) | Cod sursa (job #1757182) | Cod sursa (job #152934) | Cod sursa (job #477146)
Cod sursa(job #477146)
#include <cstdio>
#define null NULL
#define DN 200005
int nr,n,m,ord[DN],sol[DN];
bool ok=true,viz[DN];
struct nod {
int x;
nod *urm;
} *g[DN],*gt[DN];
inline int non(int x) { return (x>n)?x-n:x+n; }
void adaugare(int x, int y, bool z) {
nod *p;
p=new nod;
p->x=y;
if(z) p->urm=g[x],g[x]=p;
else p->urm=gt[x],gt[x]=p;
}
void dfs(int sursa) {
if(viz[sursa]) return;
viz[sursa]=true;
nod *p;
for(p=g[sursa]; p!=null; p=p->urm) if(!viz[p->x]) dfs(p->x);
ord[++nr]=sursa;
}
void dfs_2(int sursa) {
if(!viz[sursa]) return;
viz[sursa]=false;
nod *p;
sol[non(sursa)] =1;
for(p=gt[sursa]; p!=null; p=p->urm) if(viz[p->x]) dfs_2(p->x);
}
void add(int a,int b) {
adaugare(a,non(b),false);
adaugare(b,non(a),false);
adaugare(non(a),b,true);
adaugare(non(b),a,true);
}
int main()
{
int i,x,y,z;
freopen("andrei.in","r",stdin);
freopen("andrei.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1; i<=m; ++i) {
scanf("%d %d %d",&x,&y,&z);
if(z==0) add(x,y);
else if(z==1) add(non(x),non(y));
else add(x,non(y)),add(non(x),y);
}
for(i=1; i<=n+n; ++i) if(!viz[i]) dfs(i);
for(i=n+n; i; --i) if(viz[ord[i]] && viz[non(ord[i])]) dfs_2(ord[i]);
for(i=1; i<=n; ++i) printf("%d ",sol[i]);
return 0;
}