[最短路]tvvj1031 热浪

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[最短路]tvvj1031 热浪相关的知识,希望对你有一定的参考价值。

题目链接

好久没敲 迪杰斯特拉算法了,这个模板题目搞一波。

技术分享
#include <iostream>
#include <queue>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdio>
#define Heap pair<int,int>
using namespace std;
priority_queue< Heap,vector<Heap>,greater<Heap> > s;
const int MAXN=20005;
struct node{
    int u,v,w,next;
    node() {}
    node(int _u,int _v,int _w,int _next){
        u = _u,v = _v, w = _w,next = _next;
    }
}G[MAXN];
int n,m,start,end,Count,head[MAXN],dis[MAXN];

void AddEdge(int u,int v,int w){
    G[Count] = node(u,v,w,head[u]);
    head[u] = Count++;
}

void Dij(int x){
    for(int i=1;i<=n;i++) dis[i]=999999999;
    dis[x] = 0;
    s.push(make_pair(dis[x],x));
    while( !s.empty() ){
        Heap N = s.top();
        s.pop();
        int fuck = N.second;
        if(dis[fuck]!=N.first) continue;
        for(int e = head[fuck];e != -1;e=G[e].next){
            int v =G[e].v;
            int w =G[e].w;
            if(dis[fuck]+w<dis[v]){
                dis[v] = dis [fuck] + w;
                s.push(make_pair(dis[v],v));
            }
        }
    }
    printf("%d\n",dis[end]);
    return;
}

int main(){
    memset(head,-1,sizeof(head));
    scanf("%d%d%d%d",&n,&m,&start,&end);
    for(int i=1;i<=m;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        AddEdge(x,y,z);
        AddEdge(y,x,z);
    }    
    Dij(start);
    return 0;
}
地杰斯特拉算法

 

以上是关于[最短路]tvvj1031 热浪的主要内容,如果未能解决你的问题,请参考以下文章

1129. 热浪最短路

P1339 热浪最短路

P1339 热浪 最短路径模板题

AC日记——热浪 codevs 1557 (最短路模板题)

1129. 热浪单源最短路板子题

[最短路]P1339 [USACO09OCT]热浪Heat Wave