我用的dijstra,但是怎么改都60ptsmle,该如何优化呢,还是说应该换一种方法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
long long n,m,head[200010],tot,dis[15010][15010],q,s,t;
bool vis[20010];
struct node{
long long next,v,w;
}cnt[200010];
priority_queue<pair<long long,long long> > qq;
void insert(long long u,long long v,long long w) {
cnt[++tot].next = head[u];
cnt[tot].v = v;
cnt[tot].w = w;
head[u] = tot;
}
int main() {
cin >> n >> m;
for(long long i = 1;i <= m;i++) {
long long x,y,z;
cin >> x >> y >> z;
dis[x][y] = max(dis[x][y],z);
dis[y][x] = max(dis[y][x],z);
}
for(long long i = 1;i <= n;i++)
for(long long j = 1;j <= n;j++) {
if(i != j && dis[i][j] != 0)
insert(i,j,dis[i][j]);
}
for(long long i = 1;i <= n;i++)
for(long long j = 1;j <= n;j++) {
if(dis[i][j] == 0)
dis[i][j] = 1e18;
}
cin >> q;
for(long long i = 1;i <= q;i++) {
cin >> s >> t;
for(int j = 1;j <= n;j++) vis[j] = false;
qq.push(make_pair(0,s));
while(!qq.empty()) {
long long k = qq.top().second;
qq.pop();
if(vis[k] == true) continue;
vis[k] = true;
for(long long j = head[k];j;j = cnt[j].next) {
if(dis[s][cnt[j].v] <= min(dis[s][k],cnt[j].w) || dis[s][cnt[j].v] == 1e18) {
dis[s][cnt[j].v] = min(dis[s][k],cnt[j].w);
qq.push(make_pair(dis[s][cnt[j].v],cnt[j].v));
}
}
}
if(dis[s][t] == 1e18) cout << -1 << endl;
else cout << dis[s][t] << endl;
}
return 0;
}