博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4779 【模板】单源最短路径(标准版)
阅读量:6265 次
发布时间:2019-06-22

本文共 1762 字,大约阅读时间需要 5 分钟。

这道水题水得有点吃力。。。


杨爷出的毒瘤数据。。。

首先是非负权图,就用dijkstra。

边比较稀疏,用堆优化。

再打模板的时候发现问题:

1431596-20180724205923481-1259397182.png

在去出堆顶元素的时候,可能会出现重复节点。

重复节点使用一个done数组进行标记,如果不给的话会跑得很慢。

然后图又可能不连通。。。数据的锅。

不连通的dist是\(2^{31} - 1\)。这个是锅。

代码:

#include
#include
#include
const int maxn = 100005, maxm = 200005;struct Edges{ int next, to, weight;} e[maxm];int head[maxn], tot;int n, m, s;int dist[maxn];bool done[maxn];struct Nodes{ int v, w; bool operator < (const Nodes &rhs) const { return w > rhs.w; }};void link(int u, int v, int w){ e[++tot] = (Edges){head[u], v, w}; head[u] = tot;}int read(){ int ans = 0, s = 1; char ch = getchar(); while(ch > '9' || ch < '0') { if(ch == '-') s = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { ans = ans * 10 + ch - '0'; ch = getchar(); } return s * ans;}void dijkstra(){ memset(dist, 0x3f, sizeof(dist)); std::priority_queue
q; dist[s] = 0; q.push((Nodes){s, dist[s]}); while(!q.empty()) { Nodes x = q.top(); q.pop(); int u = x.v, dis = x.w; if(done[u]) continue; done[u] = true; for(int i = head[u]; i; i = e[i].next) { int v = e[i].to; if(dis + e[i].weight < dist[v]) { dist[v] = dis + e[i].weight; q.push((Nodes){v, dist[v]}); } } }}int main(){ n = read(), m = read(), s = read(); while(m--) { int u = read(), v = read(), w = read(); link(u, v, w); } dijkstra(); for(int i = 1; i <= n; i++) { printf("%d", dist[i]); if(i != n) printf(" "); } printf("\n"); return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9362606.html

你可能感兴趣的文章
利用谷歌控制台console调用后台代码
查看>>
jquery 点击按钮实现listbox的显示与隐藏,点击其他地方按钮外的地方,隐藏listbox...
查看>>
CSS3 盒阴影(box-shadow)详解
查看>>
PHP基础之 file_get_contents() 函数
查看>>
跨站请求伪造攻击 CSRF
查看>>
strace
查看>>
linux mysql命令
查看>>
CentOS+Nginx+PHP+MySQL详细配置(图解)
查看>>
冲刺(5)
查看>>
SQL判断字段列是否存在
查看>>
LeetCode - Find Duplicate Subtrees
查看>>
搭建android开发环境Android Studio
查看>>
求$y=Asin(\omega x+\phi)+k$类的解析式
查看>>
用PROCEDURE ANALYSE优化MYSQL表结构
查看>>
从4个方面提高用户体验
查看>>
【10-25】OOP基础-飞机游戏知识点
查看>>
HTC仅限拨打紧急电话
查看>>
c#小软件(SaveClassic)开发手记--(3)基础类(注册表操作类RegEdit)
查看>>
Linux下开发常用 模拟 Http get和post请求
查看>>
除法(暴力)
查看>>