PAT (Advanced Level) 1003 Emergency
题意 有 N 个城市,每个城市有点权, M 条带权无向边,从指定的起点城市到达指定的终点城市。要求路径最短,输出这样的最短路径有几条,其中路径上点权之和最大为多少。 思路 最短路,dijkstra。习惯性写堆优化的(自己搞一个结构体,重载一下小于号,代码可能更简洁一点)。因为还要求最短路径数量和路径最大点权和,所以稍微改一下算法:在更新距离不变时,更新答案;更新距离改变时,传递答案。 代码 # include <bits/stdc++.h> using namespace std ; int main ( ) { ios :: sync_with_stdio ( false ) ; cin . tie ( nullptr ) ; cout . tie ( nullptr ) ; int n , m , st , en ; cin >> n >> m >> st >> en ; vector < int > num ( n ) ; for ( int & e : num ) cin >> e ; vector < vector < pair < int , int >> > adj ( n ) ; for ( int i = 0 , u , v , val ; i < m ; ++ i ) { cin >> u >> v >> val ; adj [ u ] . emplace