https://leetcode.com/contest/weekly-contest-72/problems/cheapest-flights-within-k-stops/

class Solution {

public:

    int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K) {

        vector<int> distance(n, INT_MAX);

        vector<list<pair<int, int>>> edges(n);

        distance[src] = 0;

        queue<int> q;

        list<pair<int, int>>::iterator it;



        for (int i = 0; i < flights.size(); i++) {

            int s    = flights[i][0];

            int t    = flights[i][1];

            int cost = flights[i][2];

            edges[s].push_back(make_pair(t, cost));

        }

        q.push(src);

        int remain = K;

        while (remain-- >= 0) {

            int count = q.size();

            for (int i = 0; i < count; i++) {

                int now = q.front(); q.pop();

                for (it = edges[now].begin(); it != edges[now].end(); it++) {

                    if ((distance[now] + it->second) < distance[it->first]) {

                        distance[it->first] = (distance[now] + it->second);

                        q.push(it->first);

                    }

                }

            }

        }

        return distance[dst] == INT_MAX ? -1 : distance[dst];

    }

};

留言

這個網誌中的熱門文章

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/longest-univalue-path/

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/maximum-sum-of-3-non-overlapping-subarrays/