这样写的话1,2,3,4,6,8,9,10 爆了MLE
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int n, m;
vector<int> g[114514];
int f[114514];
void dfs(int x, int top) {
if (f[x] > top)
return;
else {
f[x] = top;
for (int u : g[x]) {
dfs(u, top);
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
g[v].push_back(u);
}
for (int i = n; i >= 1; i--) {
dfs(i, i);
}
for (int i = 1; i <= n; i++) {
printf("%d ", f[i]);
}
return 0;
}
但是如果将
dfs
里面的
if (f[x] > top)
改成
if (f[x])
就AC了。
有大佬解释一下吗awa。