题目地址 : hdu1874
#include<iostream>
#include<cstdio>
#include<fstream>
#include<queue>
#include<vector>
const int INF= 0x3fffffff;
using namespace std;
typedef pair<int,int> pii;
int n,m;
int d[300];
vector<int> G[300],E[300];
void init()
{
for(int i=0;i<n;i++)
{
G[i].clear();
E[i].clear();
}
}
int Dijkstra(int s,int t)
{
for(int i=0;i<n;i++)
{
d[i]=(i==s)?0:INF;
}
priority_queue<pii,vector<pii>,greater<pii> > pq;
pq.push(make_pair(d[s],s));
while(pq.empty()==false)
{
pii u=pq.top();
pq.pop();
int x=u.second;
int sz=G[x].size();
if(d[x]!=u.first) continue;
for(int i=0;i<sz;i++)
{
int y=G[x][i];
int w=E[x][i];
if(d[y]>d[x]+w)
{
d[y]=d[x]+w;
pq.push(make_pair(d[y], y));
}
}
}
return d[t];
}
int main()
{
while(cin>>n>>m)
{
init();
int a,b,c;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(b);
E[a].push_back(c);
G[b].push_back(a);
E[b].push_back(c);
}
int s,t;
cin>>s>>t;
int ans=Dijkstra(s, t);
if(ans==INF)
{
cout<<-1<<endl;
}
else cout<<ans<<endl;
}
}