这其实是一个最短路的模板题,可以直接用dijkstra代码。
`#include<bits/stdc++.h>
#define N 25001
using namespace std;
int num[N],g[2501][2501],dis[N],a[2501][2501],team[N];
int c,rs,re,ci,ts,te,t,i,j,k,tot,v,head,tail;
bool u[N];
int main()
{
cin>>t>>c>>ts>>te;
for(int i=1;i<=c;i++)
{
cin>>rs>>re>>ci;
g[rs][re]=g[re][rs]=ci;
a[rs][++num[rs]]=re;
a[re][++num[re]]=rs;
}
for(int i=1;i<=t;i++)
dis[i]=99999999;
memset(team,0,sizeof(team));
memset(u,false,sizeof(u));
dis[ts]=0;
team[1]=ts;
head=0;
tail=1;
u[ts]=true;
while(head!=tail)
{
head++;
head=((head-1)%1601)+1;
v=team[head];
u[v]=false;
for(j=1;j<=num[v];++j)
if(dis[a[v][j]]>dis[v]+g[v][a[v][j]])
{
dis[a[v][j]]=dis[v]+g[v][a[v][j]];
if(!u[a[v][j]])
{
tail++;
tail=((tail-1)%1601)+1;
team[tail]=a[v][j];
u[a[v][j]]=true;
}
}
}
cout<<dis[te];
return 0;
}`