评测记录
代码:
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define c97t cout
int n,m,x,y,aa,b,low[200001],num[200001],d,vis[200001],cnt,sz[200001],ind[200001],outd[200001];
stack<int>st;
vector<int>a[200001];
inline int ot(int x){return (x%2?x+1:x-1);}
void fohuj(int x)
{
st.push(x);
low[x]=num[x]=++d;
for(int i=0;i<a[x].size();i++)
{
int y=a[x][i];
if(!num[y])
{
fohuj(y);
low[x]=min(low[x],low[y]);
}
else if(!vis[y])low[x]=min(low[x],num[y]);
}
if(low[x]==num[x])
{
cnt++;
sz[cnt]++;
vis[x]=cnt;
while(st.top()!=x)
{
vis[st.top()]=cnt;
st.pop();
sz[cnt]++;
}
st.pop();
}
}
signed main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>aa>>x>>b>>y;
if(x==0&&y==0)
{
a[aa*2].push_back(b*2-1);
a[b*2].push_back(aa*2-1);
}
else if(x==0&&y==1)
{
a[aa*2].push_back(b*2);
a[b*2-1].push_back(aa*2-1);
}
else if(x==1&&y==0)
{
a[aa*2-1].push_back(b*2-1);
a[b*2].push_back(aa*2);
}
else
{
a[aa*2-1].push_back(b*2);
a[b*2-1].push_back(aa*2);
}
}
for(int i=1;i<=2*n;i++)if(!num[i])fohuj(i);
for(int i=1;i<=n;i++)
{
if(vis[2*i-1]==vis[2*i])
return (cout<<"IMPOSSIBLE",0);
}
cout<<"POSSIBLE"<<endl;
for(int i=1;i<=n;i++)
{
if(vis[2*i]<vis[2*i-1])cout<<1<<' ';
else cout<<0<<' ';
}
return 0;
}