1
0
已采纳
汪恺恒
中级启示者
中级启示者
Floyd不香吗
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(g[i][j]>g[i][k]+g[k][j])
g[i][j]=g[i][k]+g[k][j];//Floyd
int maxn=-INF;
for(int i=1;i<=n;i++)
if(g[1][i]>maxn)
maxn=g[1][i];
if(maxn==INF)
cout<<-1;
else
cout<<maxn;
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
李奕歌
初级天翼
初级天翼
从书上看的,望采纳
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N = 105,M = 405;
int d[N],n,m;
int idx,h[N],e[M],ne[M],w[M];
priority_queue<PII> pq;
bool st[N];
void add(int a,int b,int c){
e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++;
}
int miao(){
memset(d,0x3f,sizeof d);
memset(st,false,0);
d[1] = 0;
pq.push({-d[1],1});
int ans = 0;
while(pq.size()){
int t = pq.top().second;
ans = max(ans,d[t]);
pq.pop();
if(st[t]) continue;
st[t] = true;
for(int i = h[t];~i;i = ne[i]){
int j = e[i];
if(!st[j] && d[t] + w[i] < d[j]){
d[j] = d[t] + w[i];
pq.push({-d[j],j});
}
}
}
for(int i = 1;i <= n;i++){
if(d[i] == 0x3f3f3f3f){
ans = -1;
break;
}
}
return ans;
}
int main(){
cin>>n>>m;
int a,b,c;
memset(h,-1,sizeof h);
for(int i = 0;i < m;i++){
cin>>a>>b>>c;
add(a,b,c),add(b,a,c);
}
cout<<miao()<<endl;
return 0;
}