我知道我的写法连样例都过不了,但——
为甚会MLE啊?
#include<iostream>
#include<cstring>
#include<queue>
#define INF 0x3f3f3f3f
#define re register
using namespace std;
const int N = 19905;
int n,m,q,k;
int t[N],dp[N][N];
inline void cs(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
memset(dp,0x3f,sizeof(dp));
}
int main(){
cs();
cin>>n>>m;
for(re int i = 1;i <= n;i ++){
cin>>t[i];
dp[i][i] = 0;
}
for(re int i = 1;i <= m;i ++){
int u,v,w;
cin>>u>>v>>w;
dp[u][v] = w;
dp[v][u] = w;
}
cin>>q;
while(q --){
int x,y,s;
cin>>x>>y>>s;
if(max(t[x],t[y]) > s){
cout<<-1<<"\n";
continue;
}
while(k < n && t[k] < s){
for(re int i = 1;i <= n;i ++){
for(re int j = 1;j <= n;j ++){
dp[i][j] = dp[j][i] = min(dp[i][j],dp[i][k] + dp[j][k]);
}
}
k ++;
}
cout<<(dp[x][y] == INF ? -1 : dp[x][y])<<"\n";
}
return 0;
}
我开的数组的大小跟一个同学完全一样,我甚至还少用了两个int,但他AC我MLE???