wa on test 3求调
查看原帖
wa on test 3求调
560807
木棉絮123楼主2023/8/10 17:01
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAX=2e6+5;
#define debug(x) printf("debug:%lld\n",x)
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define go(a,b,c) for(int a=b;a>=c;a--)
vector< vector<int> > a;
inline void add(int u,int v)
{
	a[u].push_back(v);
}
int n,m,scccnt,col[MAX],low[MAX],dfn[MAX],vis[MAX],cnt;
stack<int> st;
void tarjan(int u)
{
	low[u]=dfn[u]=++cnt;
	st.push(u);vis[u]=1;
	for(auto v:a[u])
	{
		if(!dfn[v]) tarjan(v);
		else if(vis[v]) low[u]=min(low[u],dfn[u]);
	}
	if(dfn[u]==low[u])
	{
		++scccnt;
		int v;
		do
		{
			v=st.top();
			col[v]=scccnt;
			st.pop();
			vis[v]=0;
		}while(u!=v);
//		col[u]=scccnt;
	}
}
signed main()
{
	cin>>n>>m;
	a.resize(2*n+1);
	fo(i,1,m)
	{
		int u,v,fu,fv;
		cin>>u>>fu>>v>>fv;
		switch (fu*2+fv) 
		{
		case 0:
			add(u,v+n);
			add(v,u+n);
			break;
		case 1:
			add(u,v);
			add(v+n,u+n);
			/*if(u==v)
			  {
			  cout<<"IMPOSSIBLE";return 0;
			  }*/
			break;
		case 2:
			add(u+n,v+n);
			add(v,u);
			/*if(u==v)
			  {
			  cout<<"IMPOSSIBLE";return 0;
			  }*/
			break;
		case 3:
			add(u+n,v);
			add(v+n,u);
			break;
		}
	}
	fo(i,1,2*n)
	{
		if(!dfn[i]) tarjan(i);
	}
	fo(i,1,n)
	{
		if(col[i]==col[i+n])
		{cout<<"IMPOSSIBLE";return 0;}
	}
	cout<<"POSSIBLE"<<endl;
	fo(i,1,n)
	{
		cout<<(col[i]<col[i+n])<<' ';
	}
	return 0;
}

已经写麻了,明明应该输出impossible却输出了possible

2023/8/10 17:01
加载中...