<题目链接>

题目描述

给定一个 N 个点, M 条有向边的带非负权图,请你计算从 S 出发,到每个点的距离。

数据保证你能从 S 出发到任意点。

输入格式:

第一行为三个正整数 N,M,S 。 第二行起 M 行,每行三个非负整数 ui, vi, wi,表示从 ui到 vi​ 有一条权值为 wi​ 的边。

输出格式:

输出一行 N 个空格分隔的非负整数,表示 S 到每个点的距离。

1<=N<=100000

1<=M<=200000

解题分析:

由于n和m的数据太大,所以这里不能够用普通的dijkstra算法,因为它的复杂度为$O(n^2)$,所以我们这里要用的是复杂度为$O(mlog(n))$的加上堆优化的dijkstra算法。

 #include <bits/stdc++.h>
 using namespace std;

 #define INF 0x3f3f3f3f
 ;
 ;
 int head[N],dis[N],vis[N];
 int n,m,s,cnt;
 struct Edge{
     int to,val,next;
 }edge[M];
 void init(){
     cnt=;
     memset(head,-,sizeof(head));
 }
 void addedge(int u,int v,int w){
     edge[cnt].to=v,edge[cnt].val=w,edge[cnt].next=head[u];
     head[u]=cnt++;
 }
 struct Node{
     int index,dis;
     bool operator < (const Node & tmp)const{
         return dis>tmp.dis;    //由于要保证dis小的优先,所以将dis从大到小排序
     }
 }node[N];
 void Dij(int s){
     ;i<=n;i++)
         vis[i]=,node[i].index=i,node[i].dis=INF;
     priority_queue<Node>q;
     node[s].dis=;
     q.push(node[s]);
     while(!q.empty()){
         int u = q.top().index;q.pop();
         if(vis[u])continue;
         vis[u]=;
         for(int i=head[u];~i;i=edge[i].next){
             int v=edge[i].to;
             if(node[v].dis>node[u].dis+edge[i].val){   //更新以 u 为起点的,所有与它相连的线段的终点到s起点的最短距离
                 node[v].dis = node[u].dis+edge[i].val;
                 q.push(node[v]);  //由于更新了d[v].dis,所以所有以d[v].index为起点的边也要更新,所以将d[v]压入队列
             }
         }
     }
 }
 int main(){
     init();
     scanf("%d%d%d",&n,&m,&s);
     ;i<=m;i++){
         int u,v,c;scanf("%d%d%d",&u,&v,&c);
         addedge(u,v,c);
     }
     Dij(s);
     ;i<=n;i++){
         printf("%d%s",node[i].dis,i==n?"\n":" ");
     }
 }

2018-08-13

洛谷 P4779 【dijkstra】+(堆优化)+(链式前向星) (模板题)的更多相关文章

  1. 洛谷 P4779 :【模板】单源最短路径(标准版)(Dijkstra+堆优化+链式前向星)

    题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60: Ag→Cu: 最终,他因此没能与理想 ...

  2. POJ - 1330 Nearest Common Ancestors 最近公共祖先+链式前向星 模板题

    A rooted tree is a well-known data structure in computer science and engineering. An example is show ...

  3. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

  4. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  5. Floyd && Dijkstra +邻接表 +链式前向星(真题讲解来源:城市路)

    1381:城市路(Dijkstra) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 4066     通过数: 1163 [题目描述] 罗老师被邀请参加一个舞会,是 ...

  6. spfa+链式前向星模板

    #include<bits/stdc++.h> #define inf 1<<30 using namespace std; struct Edge{ int nex,to,w ...

  7. 【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)

    Dijkstra+ 链式前向星+ 优先队列   Dijkstra算法 Dijkstra最短路算法,个人理解其本质就是一种广度优先搜索.先将所有点的最短距离Dis[ ]都刷新成∞(涂成黑色),然后从起点 ...

  8. 模板 Dijkstra+链式前向星+堆优化(非原创)

    我们首先来看一下什么是前向星.   前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和 ...

  9. HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】

    最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...

随机推荐

  1. JavaScript之关闭轮询定时器(setTimeout/clearTimeout|setInterval/clearInterval)小结

    已知: 1.1 开启Timeout程序: scope.setTimeout("functionName()" | functionHandle, timeValue) 返回值:ti ...

  2. HDU4685 Prince and Princess【强连通】

    题意: 有n个王子和m个公主,每个王子都会喜欢若干个公主,也就是王子只跟自己喜欢的公主结婚,公主就比较悲惨, 跟谁结婚都行.然后输出王子可能的结婚对象,必须保证王子与任意这些对象中的一个结婚,都不会影 ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 G题

    题目链接: https://nanti.jisuanke.com/t/31459 具体思路: 先顺序输入,然后回溯,假设已经加入了n个点,那么在加入的同时,首先看一下原先x轴上已经有过的点,找到第一个 ...

  4. django学习~forms

    一 简介 今天咱们来聊聊 django强大的表单功能二 Froms作用   1 自动生成HTML表单元素   2 检查表单数据的合法性   3 如果验证错误,重新显示表单(数据不会重置)   4 数据 ...

  5. mysql 案例 ~ pt-archiver 归档工具的使用

    一 简介:今天咱们来聊聊pt-archiver的使用 二 相关参数 相关参数1   --statistics 结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以 ...

  6. cmake 使用

    1.cmake 显示编译命令: 在顶层CMakeLists.txt里设置 set(CMAKE_VERBOSE_MAKEFILE ON) 或者  cmake .        再           m ...

  7. windows Tomcat apr安装

    背景 这都是当时不了解这个东西,又怕忘了记下来的,其实试验后.也就那么回事. 转载 Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO ...

  8. 002_mtr_a network diagnostic tool

    一. mtr combines the functionality of the traceroute and ping programs in a single network diagnostic ...

  9. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy

    saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...

  10. kerberos介绍

    重要术语 1. KDC 全称:key distributed center 作用:整个安全认证过程的票据生成管理服务,其中包含两个服务,AS和TGS 2. AS 全称:authentication s ...