请求撤下这篇题解。
这篇题解上说时间复杂度是 O(n2),但实际上大概应该是,固定一个点当 DFS 起点时,每个点都会被走 从起点到它的路径条数 遍。
每一个点向它后面所有点连一条边,这样的边数是 O(n2) 条,但是路径数已经是指数级了。
随便写的数据生成器如下,这篇题解的程序在这样的数据上在我本机大概跑了 170 秒。
#include<bits/stdc++.h>
using namespace std;
int main()
{
mt19937 rnd(time(0));
freopen("data.in", "w", stdout);
puts("50 1000");
for(int i = 1; i < 50; i++) printf("%d %d %d\n", i, i + 1, rnd() % 100000 + 1);
int ed = 951;
for(int i = 50; i; i--) {
for(int j = i - 2; j; j--) {
printf("%d %d %d\n", j, i, rnd() % 100000 + 1);
if(--ed == 0) goto finish;
}
}
finish: ;
puts("100000");
for(int i = 1, u, v; i <= 100000; i++) {
u = rnd() % 50 + 1, v = rnd() % 50 + 1;
while(u == v) v = rnd() % 50 + 1;
printf("%d %d\n", u, v);
}
return 0;
}
数据有点大,不会上传,麻烦管理员手动随一组 qwq
不知道要 at 谁 qaq,各位帮我 at 一下……