/*标准dij*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 201
using namespace std;
int road[N][N],adj[N],st,ed,x,y,t,vis[N],tmin,m,n;
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(road,-1,sizeof(road));
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&t);
if(road[x][y]==-1||road[x][y]>t)
{
road[x][y]=t;
road[y][x]=t;
}
}
scanf("%d%d",&st,&ed);
for(int i=0;i<m;i++)
{
road[i][i]=0;
adj[i]=road[st][i];
vis[i]=0;
}
vis[st]=1;
for(int i=0;i<m;i++)
{
tmin=1000000;
for(int j=0;j<m;j++)
{
if(!vis[j]&&adj[j]!=-1&&tmin>adj[j])
{
tmin=adj[j];
x=j;
}
}
vis[x]=1;
for(int j=0;j<m;j++)
{
if(!vis[j]&&road[x][j]!=-1&&(adj[j]==-1||(adj[j]>road[x][j]+adj[x])))
{
adj[j]=road[x][j]+adj[x];
}
}
}
printf("%d\n",adj[ed]);
}
}
hdu 1874 畅通工程续
最新推荐文章于 2022-05-06 18:25:21 发布