原题链接:
850. Dijkstra求最短路 II - AcWing题库
题解:
本题的数据规模为:
因此可以采用堆优化的Dijkstra算法,需要注意的是采用vector开辟邻接矩阵会Segmentation Fault,因此可以通过手搓单链表建立邻接矩阵
代码:
#pragma GCC optimize(2, 3, "Ofast", "inline")
#include<bits/stdc++.h>
using namespace std;
using PII = pair<int, int>;
const int N = 2e5 + 10;
int h[N], e[N], ne[N], idx, dis[N], v[N], state[N];
//h数组是头结点数组,存储的邻接表众多链表的头结点下标(注意是下标,非编号)
//e数组存储的是下标对应的编号
//ne数组存储的是当前下标对应的下一个下标
//v数组存储的是当前下标对应的边权
int n, m;
void add(int a, int b, int c) {
e[idx] = b, v[idx] = c, ne[idx] &#