RE60pts救救救!
查看原帖
RE60pts救救救!
1100465
fire_dragon楼主2024/12/14 10:13

评测记录
代码:

#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;
}
2024/12/14 10:13
加载中...