相似方法,一个AC一个TLE,求助

P1119 灾后重建

开o2优化 @[Cgetier01](/user/1035804)
by mc_xiexie @ 2023-10-06 16:57:38


@[mc_xiexie](/user/1095322) 不行,还是TLE
by Cgetier01 @ 2023-10-06 17:01:59


~~我们用的不会不是一款洛谷吧~~ 我选的c++98 @[Cgetier01](/user/1035804)
by mc_xiexie @ 2023-10-06 17:12:43


@[mc_xiexie](/user/1095322) 刚看了下你提交的,TLE的方法是我在主函数里注释的floyd1函数
by Cgetier01 @ 2023-10-06 17:14:14


@[mc_xiexie](/user/1095322) 这段代码是超时的方法 ```cpp #include<iostream> using namespace std; #include<algorithm> #include<vector> #include<queue> #include<climits> #include<cstring> #include<cmath> #define inf 0x3f3f3f3f const int N = 210; int d[N][N], f[N][N], c[N]; int n, m, u, v, w, q; int x, y, t, ans, pos; void floyd1() { int num = 0; while (c[num] <= t && num < n)//找可以走的村庄 { num++; } for (int k = 0; k < num; k++)//用可以走的村庄做中转点更新距离 { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } } int main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = inf; } d[i][i] = 0; } for (int i = 0; i < n; i++) { cin >> c[i]; } for (int i = 1; i <= m; i++) { cin >> u >> v >> w; d[u][v] = w; d[v][u] = w; } cin >> q; for (int i = 1; i <= q; i++) { cin >> x >> y >> t; if (c[x] > t || c[y] > t)//村庄未建好 { cout << -1 << endl; continue; } floyd1();//TLE if (d[x][y] != inf) { cout << d[x][y] << endl; } else { cout << -1 << endl; } } return 0; } ```
by Cgetier01 @ 2023-10-06 17:17:18


|