假如你的prim算法和我一样并且在prim外循环求出最长边,那么注意下面代码中的vis数组,因为双向边的存在之前的dis[u]会被dis[v]更新
调试了半天(哭
void prim(int S) {
for(int i=1;i<=n;i++) dis[i]=int_INF;
dis[S]=0;
priority_queue<heapnode>q;
q.push({S,0});
while(!q.empty()&&cnt<=n-1) {
heapnode f=q.top();q.pop();
int u=f.u;
if(vis[u]) continue;
vis[u]=1;cnt++;
for(int i=0;i<edge[u].size();i++) {
int v=edge[u][i].v;
if(vis[v]) continue;
if(dis[v]>edge[u][i].w) {
dis[v]=edge[u][i].w;
q.push({v,dis[v]});
}
}
}
}
int main() {
...
for(int i=1;i<=n;i++) maxx=max(maxx,dis[i]);
...
}