萌新求助
查看原帖
萌新求助
479066
MrJXS楼主2024/6/19 17:26
#include<bits/stdc++.h>
//#define T(x) 2*x
//#define F(x) 2*x-1
using namespace std;
vector<int> son[32005];
int m,n,dfn[32005],tot,cnt,low[32005],res[32005];
bool inst[32005];
stack<int> s;
int T(int x){
	return 2*x;
}
int F(int x){
	return 2*x-1;
}
void Tarjan(int u){
	low[u]=dfn[u]=++tot;
	s.push(u);
	inst[u]=1;
	for(int v,i=0;i<son[u].size();i++){
		v=son[u][i];
		if(dfn[v]==0){
			Tarjan(v);
			low[u]=min(low[u],low[v]);
		}else if(inst[v]){
			low[u]=min(low[u],dfn[v]);
		}
	}
	if(dfn[u]==low[u]){
		cnt++;
		int temp;
		do{
			temp=s.top();
			res[temp]=cnt;
			s.pop();
			inst[temp]=0;
		}while(temp!=u);
	}
}
void lk(int a,int b){
	son[a].push_back(b);
	son[b].push_back(a);
}
int fr(int x){
	if(x%2==0) return x-1;
	return x+1;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1,a,b;i<=m;i++){
		cin>>a>>b;
		lk(T(a),F(b));
		lk(T(b),F(a));
	}
	for(int i=1;i<=n;i++){
		lk(T(2*i-1),F(2*i));
		lk(F(2*i-1),T(2*i));
		lk(T(2*i),F(2*i-1));
		lk(F(2*i),T(2*i-1));
	}
	for(int i=1;i<=4*n;i++){
		if(!dfn[i]) Tarjan(i);
	}
	for(int i=1;i<=n;i++){
		if(res[T(i*2-1)]==res[T(i*2)]||res[F(i*2-1)]==res[F(i*2)]){
			cout<<"NIE";
			return 0;
		}
	}
	for(int i=1;i<=n;i++){
		int p=2*i;
		if(res[T(p)]<res[F(p)]){
			cout<<p<<'\n';
		}else{
			cout<<fr(p)<<'\n';
		}
	}
	return 0;
}

WA28pts,怎么都找不出问题

2024/6/19 17:26
加载中...