P7771求调
查看原帖
P7771求调
1086931
bishenke_2008楼主2024/7/14 18:16

WA on #2 #3 #9 #10
请求神犇帮助!!!

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
const int M=200005;

int n,m;
int cnt=1;
int head[N];
struct Node{
	int u,v;
}node[N];
struct Edge{
	int nxt,to;
}edge[M];
bool vis[M];
int in[N],out[N];
int start=0;
int cnt1,cnt2,cnt3;
int tot=0;
int ans[M];

void add(int u,int v){
	edge[cnt].nxt=head[u];
	edge[cnt].to=v;
	head[u]=cnt++;
} 

bool cmp(Node x,Node y){
	if(x.u==y.u) return x.v>y.v;
	return x.u>y.u;
}

void dfs(int u){
	for(int i=head[u];i;i=head[u])
		if(!vis[i]){
			head[u]=edge[i].nxt;
			int v=edge[i].to;
			vis[i]=true;
			dfs(v);
		}
	ans[++tot]=u;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		node[i].u=u,node[i].v=v;
		in[v]++,out[u]++;
	}
	
	sort(node+1,node+m+1,cmp);
	for(int i=1;i<=m;i++)
		add(node[i].u,node[i].v);
		
	for(int i=1;i<=n;i++){
		if(out[i]-in[i]==1){
			start=i;
			cnt1++;
		}
		else if(in[i]-out[i]==1) cnt2++;
		else if(in[i]!=out[i]) cnt3++;
	}	
	
	if(cnt1==0&&cnt2==0&&cnt3==0) dfs(start);
	else if(cnt1==1&&cnt2==1&&cnt3==0) dfs(start);
	else{
		cout<<"No";
		return 0;
	}
	
	for(int i=tot;i>=1;i--)
		cout<<ans[i]<<' ';
	return 0;
}
2024/7/14 18:16
加载中...