开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