<pre name="code" class="cpp">#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N=210, inf=1061109567;
struct node{
int x,val;
node() {}
node(int a, int b): x(a), val(b) {}
};
int dis[N], map[N][N];
int n,m,s,e;
void bfs()
{
queue<node> v;
node a;
v.push( node(s,0) );
dis[s]=0;
while( !v.empty() )
{
a=v.front(); v.pop();
for(int i=1; i<=n; i++)
{
if( map[a.x][i]<inf && map[a.x][i]+a.val<dis[i] ){
dis[i]=map[a.x][i]+a.val;
v.push( node(i,dis[i]) );
}
}
}
}
int main()
{
// freopen("in","r",stdin);
int x,y,z,i;
while( ~scanf("%d%d",&n,&m) )
{
memset(dis,0x3F,sizeof(dis));
memset(map,0x3F,sizeof(map));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if( z<map[x+1][y+1])
map[x+1][y+1]=map[y+1][x+1]=z;
}
scanf("%d%d",&s,&e);
s++; e++; bfs();
if( dis[e]>1000000000 )
printf("-1\n");
else
printf("%d\n",dis[e]);
}
return 0;
}
hdu 1874
最新推荐文章于 2021-04-12 07:44:44 发布