luogu p3371 单源最短路径(dijkstral

Posted Draymonder

tags:

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

本来我写的对的

我就多手写了个

ios::sync_with_stdio(false);

我程序里面用了cin 还有scanf 本来想偷偷懒

我就说 我查了半天错 根本找不到的啊...

后来交了几次 发现一直有RE 才发现...... 我好笨

 

//最短路 dijkstral
#include<bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int maxn = 10010;
const ll INF = 2147483647;
typedef pair<ll ,int> pli;
struct node
{
    int to,cost;
    node(int t,int c):to(t),cost(c){}
    bool operator < (const node & a)const {
        return cost > a.cost;
    }
};
vector<node> E[maxn];
ll d[maxn];
priority_queue<pli,vector<pli>,greater<pli> > Q;

int main()
{
    
    int n,m,st;
    cin>> n>>m>>st;
    for(int i=1;i<=m;i++)
    {
        int x,y,v;
        scanf("%d %d %d",&x, &y ,&v);
        E[x].push_back({y,v});
    }
    for(int i=1;i<=n;i++)
    {
        d[i]=INF;
    }
    d[st] = 0;
    Q.push({0,st});
    while ( Q.size() )
    {
        pli now = Q.top();Q.pop();
        ll cost = now.first;
        int p=now.second;
        if(cost >= INF)
            continue;
        for(int i=0;i<E[p].size();i++)
        {
            int v = E[p][i].to;
            if(d[v] > cost + E[p][i].cost)
            {
                d[v] = cost + E[p][i].cost;//更新最短路;
                Q.push({d[v],v});
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(i!= n)
            cout<<d[i]<<" ";
        else
            cout<<d[i];
    }
    cout<<endl;

}

 

以上是关于luogu p3371 单源最短路径(dijkstral的主要内容,如果未能解决你的问题,请参考以下文章

luogu p3371 单源最短路径(dijkstral

Luogu P3371 模板单源最短路径

20171109Luogu P3371 模板单源最短路径--SPFA

luogu P3371 & P4779 ---单源最短路径spfa & 最大堆优化Dijkstra

P3371 模板单源最短路径(弱化版)

洛谷 P3371 单源最短路径(Java版)