链式向前星存图,Dijkstra 堆优化 HUD 2544
#include<bits/stdc++.h> using namespace std; const int SIZE = 201023; struct Node { int next, to, w; } edge[SIZE]; int head[SIZE], cnt; int dis[SIZE], sta; bool Vis[SIZE]; void add(int form, int to, int w) { edge[cnt].w = w; edge[cnt].next = head[form]; edge[cnt].to = to; head[form] = cnt++; } void init() { cnt = 0; memset(head, -1, sizeof head); memset(dis, 0x3F, sizeof dis); memset(Vis, false, sizeof Vis); } void Dijkstra() { priority_queue<pair<int, int> > que; que.push(make_pair(0, sta)); while (!que.empty()) { int now = que.top().second; que.pop(); if (Vis[now]) continue; Vis[now] = true; for (int pos = head[now]; ~pos; pos = edge[pos].next) if (dis[edge[pos].to] > dis[now] + edge[pos].w) { dis[edge[pos].to] = dis[now] + edge[pos].w; que.push(make_pair(-dis[edge[pos].to], edge[pos].to)); } } } int main() { ios::sync_with_stdio(false); int form, to, w, paths; while (cin >> sta >> paths && sta && paths) { init(); dis[sta] = 0; while (paths--) { cin >> form >> to >> w; add(form, to, w); add(to, form, w); } Dijkstra(); cout << dis[1] << endl; } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复