90pts求调
查看原帖
90pts求调
1041723
封禁用户楼主2023/9/21 11:23
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,ans[N],cnt,in[N],out[N],head[N];
vector<int> nbr[N];
void dfs(int x)
{
	for(int i=head[x];i<nbr[x].size();i=head[x])
	{
		int y=nbr[x][i];
		head[x]=i+1;
		dfs(y);
	}
	ans[++cnt]=x;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		nbr[u].push_back(v);
		in[v]++;
		out[u]++;
	}
	int start=-1,c1=0,c2=0;
	for(int i=1;i<=n;i++)
	{
		if(out[i]-in[i]==1)
			c1++,start=i;
		if(in[i]-out[i]==1)	
			c2++;
	}
	if((!c1&&!c2)==false&&(c1&&c2)==false)
		return cout<<"No\n",0;
	for(int i=1;i<=n;i++)
		sort(nbr[i].begin(),nbr[i].end());
	if(start==-1)
		for(int i=1;i<=n;i++)
			if(in[i]||out[i])
			{
				start=i;
				break;
			}
	dfs(start);
	for(int i=cnt;i>=1;i--)
		cout<<ans[i]<<" ";
	return 0;
} 
2023/9/21 11:23
加载中...