#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,i,j,x,y,k,c=0;
int d[111][111];
int D[111][111];
int sum[100001];
void co()
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
D[i][j]=d[i][j];
}
}
}
signed main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin>>n>>m;
memset(d,0x3f,sizeof(d));
for(i=1; i<=m; i++)
{
cin>>x>>y>>d[x][y];
d[y][x]=d[x][y];
}//下面就是通用的Floyd模板
for(k=1; k<=n; k++)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(d[i][j]>d[i][k]+d[k][j])
d[i][j]=d[i][k]+d[k][j];
}
}
}
//Floyd算法求最短径
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
co();
D[i][j]=D[j][i]=0;
for(x=1; x<=n; x++)
{
for(y=1; y<=n; y++)
{
if(D[x][y]>D[x][i]+D[i][y])
D[x][y]=D[x][i]+D[i][y];
}
}//只用写i,j两个点就行,因为不这样会超时
for(x=1; x<=n; x++)
{
for(y=1; y<=n; y++)
{
if(D[x][y]>D[x][j]+D[j][y])
D[x][y]=D[x][j]+D[j][y];
}
}
for(x=1; x<=n; x++)
{
for(y=1; y<x; y++)
sum[c]+=D[x][y];
}
c++;
}
}
sort(sum,sum+c);
cout<<sum[0]<<endl;
}
/*泛舟沧海,立马昆仑*/
/*若你为了错过太阳而哭泣,那么你也将错过群星了*/
/*红了樱桃,绿了芭蕉*/
心得:理解了Floyd就好做了,关键就是拓展技能树2024.3.7