#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
stack<int> s;
int in[100009];
int out[100009];
int f[100009];
struct node
{
int from,to,next;
};
node edge[200009];
int head[100009];
int num;
void add(int from,int to)
{
edge[++num].next=head[from];
edge[num].from=from;
edge[num].to=to;
head[from]=num;
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int x,y;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
in[y]++;
out[x]++;
add(x,y);
}
for(int i=1;i<=m;i++)
if(in[i]==0)
{
s.push(i);
f[i]=1;
}
int I=0;
while(I!=m)
{
int u=s.top();
s.pop();
I++;
for(int i=head[u];i!=0;i=edge[i].next)
{
in[edge[i].to]--;
f[edge[i].to]=max(f[edge[i].to],f[u]+1);
if(in[edge[i].to]==0)
{
in[edge[i].to]=0x7fffffff;
s.push(edge[i].to);
}
}
}
for(int i=1;i<=m;i++)
printf("%d\n",f[i]);
return 0;
}
P1137 旅行计划

最新推荐文章于 2024-03-13 21:43:39 发布