既然卡SPFA,那就用Dijkstra + 堆优化

我太菜了就不会SPFA

就是要注意,可能有些同学会说:

“我们又不是不会Dijkstra + 堆优化”

于是自信满满的交上,一看就傻眼了,,,

60分?! #2 #3 TLE?!

这里就是一个需要注意的地方了

过不去可能是因为没有加一个简单的优化:(下面截取一部分代码)

while (q.size()){int u = q.top().v;int d = q.top().u;q.pop();if(d!=dis[u])//这里是优化哦continue;//QAQrep(i,u){int v = e[i].v;int w = e[i].w;if (dis[v] > dis[u] + w){dis[v] = dis[u] + w;node p;p.u = dis[v], p.v = v;q.push(p);}}}

这个优化把一些不可行的路径直接跳过去,会减少一些时间

没有这句是2500+ms

有这句只需208msQAQ

那么Dijkstra是不需要讲的(如果你做过弱化版)

堆优化似乎也不难,就是拿堆优化找最短dis就好

完整代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define go(i, j, n, k) for (int i = j; i <= n; i += k)
#define fo(i, j, n, k) for (int i = j; i >= n; i -= k)
#define rep(i, x) for (int i = h[x]; i; i = e[i].nxt)
#define mn 100010
#define inf 1 << 30
#define ll long long
#define ld long double
#define fi first
#define se second
#define root 1, n, 1
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
inline int read(){int f = 1, x = 0;char ch = getchar();while (ch > '9' || ch < '0'){if (ch == '-')f = -f;ch = getchar();}while (ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}
inline void write(int x){if (x < 0)putchar('-');x = -x;if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
//This is AC head above...
struct edge{int v, nxt, w;
} e[mn<<1];
int h[mn],p;
inline void add(int a,int b,int c){p++;e[p].nxt = h[a];h[a] = p;e[p].v = b;e[p].w = c;
}
struct node{int u,v;bool operator <(const node &b) const{return u > b.u;}
};
/*
bool operator <(const node &a,const node &b) {return a.u > b.u;
};
*/
int n,m,s;
int dis[mn];
priority_queue<node> q;
inline void Dij(int s){go(i, 0, n, 1)dis[i] = inf;dis[s] = 0;node o;o.u = 0;o.v = s;q.push(o);while (q.size()){int u = q.top().v;int d = q.top().u;q.pop();if(d!=dis[u])continue;rep(i,u){int v = e[i].v;int w = e[i].w;if (dis[v] > dis[u] + w){dis[v] = dis[u] + w;node p;p.u = dis[v], p.v = v;q.push(p);}}}
}
int main(){n=read(),m=read(),s=read();go(i,1,m,1){int u = read(), v = read(), w = read();add(u, v, w);}Dij(s);go(i,1,n,1){cout << dis[i] << " ";}cout << "\n";return 0;
}

第五次发题解,希望可以帮助一直爆60的同学

转载于:https://www.cnblogs.com/yizimi/p/10056237.html

题解 P4779 【【模板】单源最短路径(标准版)】相关推荐

  1. p4779 单源最短路径(标准版)-java版

    传送门: P4779 [模板]单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4779 先给 ...

  2. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

  3. P4779 【模板】单源最短路径(标准版)

    # [模板]单源最短路径(标准版) ## 题目背景 2018 年 7 月 19 日,某位同学在 [NOI Day 1 T1 归程](https://www.luogu.org/problemnew/s ...

  4. 洛谷 P3371 【模板】单源最短路径(弱化版)【最短路】【spfa】

    洛谷 P3371 [模板]单源最短路径(弱化版) 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P3371 [模板]单源最短路径(弱化版) ...

  5. 最短路——【模板】单源最短路径(弱化版)(dijkstra)

    题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...

  6. P3371 【模板】单源最短路径(弱化版)

    题目 P3371 [模板]单源最短路径(弱化版) 分析 Dijkstra模板题,只不过这里用了链式前向星 AC代码 #include<cstdio> #include<iostrea ...

  7. 洛谷_P3371 【模板】单源最短路径(弱化版)_dijkstra_堆优化

    洛谷_P3371 [模板]单源最短路径(弱化版)_dijkstra_堆优化 // dijkstra最短路算法_堆优化 #include<bits/stdc++.h> using names ...

  8. Luogu 3371【模板】单源最短路径

    Luogu 3371[模板]单源最短路径 第一次写博客用图论题来试一试 接下来是正文部分 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包 ...

  9. 55、【图】Dijkstra求最短路径(单源最短路径+边权重为正数)(C/C++版)

    算法介绍 Dijkstra算法是基于贪心思想,用于实现只含有正权边的单源最短路径问题,单源路径是从一个固定起始点出发到其余各点的路径. 算法过程: 首先,获取起始点到其余点的距离,然后从起始点出发,每 ...

  10. Dijkstra算法求解单源最短路径问题

    文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...

最新文章

  1. R语言ggplot2可视化在可视化图形的X轴标签中添加温度摄氏度符号(add temperature degree symbol on axis label)
  2. python去重txt文本_Python 文件去重(转载)
  3. HDU1074 Doing Homework
  4. 软件开发最重要的十件事
  5. 打开黑色_表哥出差带回来一箱苹果,打开后发现是黑色的,大家表示都没见过...
  6. JAVA进阶教学之(String类的常用方法)
  7. 浅谈Fragment
  8. kafka配置项host.name advertised.host.name
  9. LayoutInflater拦截View创建,自定义Resource对象
  10. 计算机二级Java笔记/重难点易错点总结(按章节归纳整理)
  11. windows中使用docker构建镜像
  12. SQL Server中查询ORACLE的数据
  13. Word一键生成英文目录(域方法)
  14. flash firefox linux,Linux下安装firefox的flash插件
  15. Segmentation Measures
  16. Windows Server 2016 实现跨域、跨林之间的访问
  17. 金三银四,是纵马一跃,还是稳如老狗!
  18. 网页嵌入媒体播放器代码 选择自 murky 的 Blog
  19. win10千万不要重置_ Win10重置此电脑功能详细使用教程
  20. 巴西柔术第六课:侧向压制上位进攻技术

热门文章

  1. 【CyberSecurityLearning 附】python3-requests模块
  2. SpringBoot代码复用——thymeleaf提取导航栏并插入或替换元素
  3. sql注入及mybatis防止sql注入
  4. QT读取Word文档
  5. zcmu2012(积性函数---因子和)
  6. 【译】Android中的安全数据— Android中的加密(第1部分)
  7. 【译】Google's AutoML: Cutting Through the Hype
  8. Ethereum Bootstrap 以太坊本地私有链开发环境搭建
  9. 说说PendingIntent的内部机制
  10. Android Binder机制(1501210451 张志康)