RT
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cctype>
#include<cmath>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
struct edge{
int from,to;
}qwq[1000005];
bool cmp(edge a,edge b){
if(a.from==b.from){
return a.to<b.to;
}
return a.from>b.from;
}
bool view[1000005];
void dfs(int now){
view[1]=1;
printf("%d ",now);
//cout<<now<<" ";
for(int i=1;i<=m;i++){
if(qwq[i].from==now&&!view[qwq[i].to]){
view[qwq[i].to]=1;
dfs(qwq[i].to);
// view[qwq[i].to]=0;
}
}
}
queue<int>sto;
void bfs(int now){
sto.push(now);
view[1]=1;
int sum=0;
for(int qqq=0;qqq<n;qqq++){
for(int i=1;i<=m;i++){
if(qwq[i].from==sto.front()&&!view[qwq[i].to]){
view[qwq[i].to]=1;
sto.push(qwq[i].to);
}
}
printf("%d ",sto.front());
// cout<<sto.front()<<" ";
sto.pop();
sum++;
if(sum==n)break;
}
}
int main(){
scanf("%d%d",&n,&m);
memset(view,0,sizeof(view));
memset(qwq,0,sizeof(qwq));
qwq[0].from=998244353;
qwq[0].to=998244353;
for(int i=1;i<=m;i++){
scanf("%d%d",&qwq[i].from,&qwq[i].to);
// cin>>qwq[i].from>>qwq[i].to;
}
sort(qwq,qwq+m+1,cmp);
dfs(1);
printf("\n");
memset(view,0,sizeof(view));
bfs(1);
return 0;
}
不过话说这种题没A还没调出来还是很沮丧的 求助