Pagini recente » Cod sursa (job #2677950) | Cod sursa (job #19571) | Cod sursa (job #3186489) | Cod sursa (job #705197) | Cod sursa (job #791409)
Cod sursa(job #791409)
#include<fstream>
#include<vector>
using namespace std;
int i,j,n,m,x,y,c,ord[200001],uz[200001],niv;
int comp[200001],d[200001],sol[2000001];
vector<int> a[200001],at[200001];
int nod(int x)
{
if(x<=n)
return x+n;
return x-n;
}
void df1(int x)
{
int i;
uz[x]=1;
for(i=0;i<a[x].size();++i)
if(!uz[a[x][i]])
df1(a[x][i]);
ord[++ord[0]]=x;
}
void df2(int x)
{
int i;
uz[x]=0;
comp[x]=niv;
d[niv]=x;
for(i=0;i<at[x].size();++i)
if(uz[at[x][i]])
df2(at[x][i]);
}
int main()
{
ifstream f("andrei.in");
ofstream g("andrei.out");
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y>>c;
if(c==0)
{
a[nod(x)].push_back(y);
a[nod(y)].push_back(x);
}
if(c==1)
{
a[x].push_back(nod(y));
a[y].push_back((nod(x)));
}
if(c==2)
{
a[x].push_back(y);
a[y].push_back(x);
a[nod(x)].push_back(nod(y));
a[nod(y)].push_back(nod(x));
}
}
for(i=1;i<=n*2;++i)
for(j=0;j<a[i].size();++j)
at[a[i][j]].push_back(i);
for(i=1;i<=n*2;++i)
if(!uz[i])
df1(i);
for(i=n*2;i>=1;--i)
if(uz[ord[i]])
{
++niv;
df2(ord[i]);
}
for(i=1;i<=niv;++i)
sol[i]=-1;
for(i=1;i<=niv;++i)
if(sol[i]==-1)
{
sol[i]=0;
sol[comp[nod(d[i])]]=1;
}
for(i=1;i<=n;++i)
g<<sol[comp[i]]<<" ";
return 0;
}