@[telankesi](/user/866969) 您的拓扑排序函数应改为:
```cpp
int Tuopu() {
queue<int>q;
int dis[N];
for (int i = 1; i <= n; i++) {
dis[i] = 0;
if (indu[i] == 0 &&id[i]==i) {
q.push(i);
dis[i]=w[i];
}
}
while (!q.empty()) {
int k = q.front();
q.pop();
for (int i = h[k]; i; i = ed[i].next) {
int v = ed[i].to;
dis[v] = max(dis[v], dis[k]+w[v]);
indu[v]--;
if (indu[v] == 0)q.push(v);
}
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans = max(ans, dis[i]);
return ans;
}
```
与您的代码主要有 2 处区别:
1. $dis_i$ 应初始化为 $0$
2. 拓扑排序不需要跑 $n$ 次
by AZN_0975 @ 2023-07-07 09:06:08
@[AZN_0975](/user/476985) 已关注谢谢
by telankesi @ 2023-07-07 09:37:14