【HDU 2544】最短路裸题【测板】

来源:互联网 发布:淘宝的好评可以删除吗 编辑:程序博客网 时间:2024/05/15 03:10

Dijkstra+Heap板
(ps:因为SPFA被卡掉特来练习Dijkstra)

#include<bits/stdc++.h>using namespace std;int n,m;#define M 10010#define N 110#define mk(a,b) make_pair(a,b)typedef pair<int,int> pii;priority_queue<pii,vector<pii>,greater<pii> >qs;struct Edge{    int to,w,next;}e[M<<1];int head[N],eid=1;inline void adde(int u,int v,int w){    e[eid].to=v;    e[eid].w=w;    e[eid].next=head[u];    head[u]=eid++;  }int dis[N];bool vis[N];void Dijkstra(int s,int t){    memset(dis,0x3f,sizeof(dis));    dis[s] = 0;    qs.push(mk(0,1));    while(!qs.empty())    {        pii p = qs.top();qs.pop();        int u = p.second;        if(p.first>dis[u])continue;        for(int i=head[u];~i;i=e[i].next)        {            int v=e[i].to;            if(dis[v]>dis[u]+e[i].w)                {                dis[v]=dis[u]+e[i].w;                qs.push(mk(dis[v],v));            }        }           }   }int main(){    ios::sync_with_stdio(false);cin.tie(0);    int a,b,c;    while(cin>>n>>m)    {        if(!n&&!m)break;        memset(head,-1,sizeof(head));eid=1;        while(m--)        {            cin>>a>>b>>c;            adde(a,b,c);            adde(b,a,c);            }        Dijkstra(1,n);        cout<<dis[n]<<endl;         }       return 0;}
1 0
原创粉丝点击