Pagini recente » Cod sursa (job #2042579) | Cod sursa (job #1180830) | Cod sursa (job #1748549) | Cod sursa (job #1792292) | Cod sursa (job #1937308)
# include <fstream>
# include <vector>
# define DIM 200010
using namespace std;
ifstream fin("andrei.in");
ofstream fout("andrei.out");
vector<int> Lista[DIM];
int Marcat[DIM],s[DIM],poz[DIM],low[DIM],sol[DIM],ctc[DIM];
int n,m,i,x,y,c,niv,u;
int rv(int x){
if(x>=n)
return x-n;
return x+n;
}
void tarjan(int nc){
niv++;
poz[nc]=niv;
low[nc]=niv;
s[++u]=nc;
Marcat[nc]=1;
for(int i=0;i<Lista[nc].size();i++){
int nv=Lista[nc][i];
if(poz[nv]==0)
tarjan(nv);
if(Marcat[nv]==0)
low[nc]=min(low[nc],low[nv]);
}
if(low[nc]==poz[nc]){
int k=0,val=0;
while(s[u]!=nc){
val=sol[s[u]];
Marcat[s[u]]=0;
ctc[++k]=s[u];
u--;
}
val=sol[s[u]];
Marcat[s[u]]=0;
ctc[++k]=s[u];
u--;
if(val==0)
val=1;
for(int i=1;i<=k;i++){
sol[ctc[i]]=val;
sol[rv(ctc[i])]=3-val;
}
}
}
int main () {
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y>>c;
if(c==0){
Lista[rv(x)].push_back(y);
Lista[rv(y)].push_back(x);
continue;
}
if(c==1){
Lista[x].push_back(rv(y));
Lista[y].push_back(rv(x));
continue;
}
Lista[x].push_back(y);
Lista[y].push_back(x);
Lista[rv(x)].push_back(rv(y));
Lista[rv(y)].push_back(rv(x));
}
for(i=1;i<=n;i++)
if(poz[i]==0)
tarjan(i);
for(i=1;i<=n;i++)
fout<<sol[i]%2<<" ";
fout<<"\n";
return 0;
}