不用链式前向星,用vector数组存储点
#include<bits/stdc++.h>
using namespace std;
int n,m,sum[10005];
int d[10005];
vector<int>g[105];
void toposort()
{
queue<int>q;
for(int i=1;i<=n;i++)
if(d[i]==0)sum[i]=1,q.push(i);
while(!q.empty())
{
int f=q.front();
q.pop();
for(int i=0;i<g[f].size();i++)
{
int t=g[f][i];
d[t]--;
sum[t]=max(sum[t],sum[f]+1);
if(d[t]==0)q.push(t);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
d[y]++;
g[x].push_back(y);
}
toposort();
for(int i=1;i<=n;i++)
cout<<sum[i]<<"\n";
return 0;
}
参考题目:旅行计划