代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
vector<pair<int,int>>e[101000];
int sum[101000];
int vis[101000];
int tmp[101000];
void bfs(int x)
{
memset(sum,0x3f,sizeof(sum));
memset(tmp,0,sizeof(tmp));
queue<int>q;
q.push(x);
vis[x]=1;
tmp[x]=1;
sum[x]=0;
while(!q.empty())
{
int u=q.front();
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].first;
int w=e[u][i].second;
if(sum[v]>sum[u]+w)
{
sum[v]=sum[u]+w;
tmp[v]++;
if(tmp[v]<101)
{
if(vis[v]==0)
{
vis[v]=1;
q.push(v);
}
}
}
}
q.pop();
vis[u]=0;
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int a,b,c;
cin>>m>>n>>a>>b>>c;;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
e[u].push_back({v,w});
e[v].push_back({u,w});
}
bfs(a);
int ans1=sum[b],ans2=sum[c];
bfs(b);
int ans3=sum[c];
bfs(c);
int ans4=sum[b];
cout<<min(ans1+ans3,ans2+ans4);
return 0;
}