#include<bits/stdc++.h>
using namespace std;
int n,m;
int su;
int sv;
int by;
int Next;
int Max=-1;
struct Edge
{
int next;
int to;
int w;
} edge[100010];
int head[100010]={0};
int cnt=0;
void add(int u,int v,int w)
{
cnt++;
edge[cnt].w=w;
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt;
}
int main()
{
cin>>n>>m;
for(int s=1;s<=m;s++)
{
cin>>su>>sv;
if(Max<su) Max=su;
if(Max<sv) Max=sv;
add(su,sv,1);
}
for(int j=1;j<=n;j++)
{
int ans=j;
for(int i=head[j];i;)
{
by=i;
if(edge[i].to>ans) ans=edge[i].to;
if(ans==Max)
{
break;
}
Next=edge[i].to;
if(Next!=0)
{
i=head[Next];
if(edge[i].to>ans) ans=edge[i].to;
continue;
}
i=by;
i=edge[i].next;
}
cout<<ans<<" ";
}
return 0;
}
测试点1、2、4、6、9 TLE
3、5、7、8、10 WA