我是用的vector邻接表写的,样例和第一个点能A掉,但是后四个点WA,开O2的话WA变RE 不知道为什么,麻烦各位dalao帮忙。
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1e5 + 5;
int n,m;
queue<int> q;
vector<int> v[maxn];
int rudu[105];
int f[maxn];
void topu()
{
for(int i = 1;i <= n;i++)
{
if(rudu[i] == 0)
{
f[i] = 1;
q.push(i);
}
}
while(!q.empty())
{
int x = q.front();
q.pop();
for(vector<int>::iterator it = v[x].begin();it != v[x].end();it++)
{
rudu[*it]--;
if(rudu[*it] == 0)
{
f[*it] = max(f[*it],f[x] + 1);
q.push(*it);
}
}
}
}
int main()
{
cin >> n >> m;
for(int i = 1;i <= m;i++)
{
int a,b;
cin >> a >> b;
v[a].push_back(b);
rudu[b]++;
}
topu();
for(int i = 1;i <= n;i++)
{
cout << f[i] << endl;
}
return 0;
}