#include<bits/stdc++.h>
using namespace std;
int n,m,to[1000005],nxt[1000005],h[100005],cnt,d[1000005],head,tail=1;
bool bj[100005][2];
struct node{
int x,y;
}s[1000005];
void add(int a,int b)
{
to[++cnt]=b;
nxt[cnt]=h[a];
h[a]=cnt;
}
void dfs(int u)
{
if(!bj[u][0])
{
printf("%d ",u);
bj[u][0]=1;
}
for(int j=h[u];j;j=nxt[j])
{
dfs(to[j]);
}
}
void bfs(int u)
{
bj[u][1]=1;
d[1]=u;
printf("%d ",u);
while(head<tail)
{
head++;
int x=d[head];
for(int j=h[x];j;j=nxt[j])
{
int v=to[j];
if(!bj[v][1])
{
tail++;
bj[v][1]=1;
d[tail]=v;
printf("%d ",v);
}
}
}
}
int cmp(node a,node b)
{
if(a.x!=b.x) return a.x<b.x;
return a.y>b.y;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&s[i].x,&s[i].y);
}
sort(s+1,s+m+1,cmp);
for(int i=1;i<=m;i++)
{
add(s[i].x,s[i].y);
}
dfs(1);
printf("\n");
bfs(1);
return 0;
}
为什么后四个点MLE