zoukankan      html  css  js  c++  java
  • P3371 【模板】单源最短路径(弱化版)(Dijkstra算法)

    题目描述

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

    输入输出格式

    输入格式:

    第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。

    接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。

    输出格式:

    一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)

    输入输出样例

    输入样例#1: 复制
    4 6 1
    1 2 2
    2 3 2
    2 4 1
    1 3 5
    3 4 3
    1 4 4
    输出样例#1: 复制
    0 2 4 3

    说明

    时空限制:1000ms,128M

    数据规模:

    对于20%的数据:N<=5,M<=15;

    对于40%的数据:N<=100,M<=10000;

    对于70%的数据:N<=1000,M<=100000;

    对于100%的数据:N<=10000,M<=500000。保证数据随机。

    对于真正 100% 的数据,请移步 P4779。请注意,该题与本题数据范围略有不同。

    样例说明:

    图片1到3和1到4的文字位置调换

    wa到自闭了 pair 和 make_pair 搞不清 有毒

     1 //单源最短路径2Dijkstra算法 
     2 #include <iostream>
     3 #include <string>
     4 #include <cstring>
     5 #include <vector>
     6 #include <queue>
     7 #include <cstdio>
     8 #include <utility>
     9 using namespace std;
    10 typedef long long ll;
    11 typedef pair<int,int> P;
    12 const int INF=2147483647;
    13 struct edge
    14 {
    15     int from,to,cost;
    16 }es[500005];
    17 vector<int> G[10005];
    18 int d[10005];
    19 int n,m,s;//n顶点数,m边数,s起点
    20 int main()
    21 {
    22        scanf("%d%d%d",&n,&m,&s);
    23     for(int i=1;i<=m;i++){
    24         scanf("%d%d%d",&es[i].from,&es[i].to,&es[i].cost);
    25         G[es[i].from].push_back(i);
    26     }
    27     for(int i=1;i<=n;i++) d[i]=INF;
    28     priority_queue<P, vector<P>, greater<P> > que;
    29     d[s]=0;
    30     que.push(make_pair(0,s));
    31     while(!que.empty()){
    32         P p=que.top();
    33         que.pop();
    34         int v=p.second;
    35         if(d[v]!=p.first) continue;
    36         for(int i=0;i<G[v].size();++i){
    37             edge e=es[G[v][i]];
    38             if(d[e.to]>d[v]+e.cost){
    39                 d[e.to]=d[v]+e.cost;
    40                 que.push(make_pair(d[e.to],e.to));
    41             }
    42         }
    43     }
    44     for(int i=1;i<=n;i++) printf("%d ",d[i]);
    45     return 0;
    46 }
  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/wydxry/p/10574402.html
Copyright © 2011-2022 走看看