leeetcode-882

题意分析

882. 细分图中的可到达节点 - 力扣(LeetCode)

        这题要求求在给定范围内可到达的点值数目。这里所谓的小分点其实就可以看成是边权值,然后加上能到达的顶点值即可。

算法思路

  1. 先dijkstra算最短路径,如果不满足maxmove内的,就不求它最短路径
  2. 求大顶点数目直接存不存在最短路即可,求小顶点数目要针对每条边,看两顶点maxmove-dist的和是否比边权值小,加上最小值即可。

代码实现

typedef pair PII;
const int inf=INT_MAX/2;
class Solution {
public:
    int reachableNodes(vector>& edges, int maxMoves, int n) {
        vector> g(n);
        for(auto & e:edges){
            int a=e[0],b=e[1],w=e[2];
            g[a].emplace_back(b,w);
            g[b].emplace_back(a,w);
        }
        priority_queue,greater<>> q;
        q.emplace(0,0);
        vector dist(n,inf);
        while(!q.empty()){
            auto [d,i]=q.top();q.pop();
            if(dist[i]maxMoves) continue;
                q.emplace(d+w+1,nxt);
            }
        }
        long long ans=0;
        for(int i=0;i

解题总结

        要将题意转化成顶点、边,求边的最短路问题。

你可能感兴趣的:(#,最短路,算法,leetcode,c++)