http://acm.hdu.edu.cn/status.php
作为dij堆优化的模板,适用于稠密图,码住了。
#include<iostream>
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1004;
int d[maxn];
vector<pair<int,int> > E[maxn];
void ini()
{
for(int i=0;i<maxn;i++) E[i].clear();
for(int i=0;i<maxn;i++) d[i]=1e9;
}
int main()
{
int n,m,a,b,c;
while(cin>>n>>m)
{
ini();
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
E[a].push_back(make_pair(b,c));
E[b].push_back(make_pair(a,c));
}
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > Q;
int sta,en;
scanf("%d%d",&sta,&en);
d[sta]=0;
Q.push(make_pair(d[sta],sta));
while(!Q.empty())
{
int now=Q.top().second;
Q.pop();
for(int i=0;i<E[now].size();i++)
{
if(d[E[now][i].first]>d[now]+E[now][i].second)
{
d[E[now][i].first]=d[now]+E[now][i].second;
Q.push(make_pair(d[E[now][i].first],E[now][i].first));
}
}
}
if(d[en]==1e9) printf("-1\n");
else printf("%d\n",d[en]);
}
return 0;
}