Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <map>
- #include <set>
- #include <algorithm>
- using namespace std;
- int dfs(int passId, int l, int k, const int p,
- const map<int, pair<vector<pair<int, int>>, vector<pair<int, int>>>>& fromEachPassToDriverAndOtherPass,
- set<int>& used)
- {
- int min_price = k;
- used.insert(passId);
- const auto& pass = fromEachPassToDriverAndOtherPass.at(passId);
- const auto& toDrivers = pass.first;
- const auto& toOthersPass = pass.second;
- for (const auto& toDriver : toDrivers)
- {
- if (toDriver.second + l < p)
- min_price -= (p - toDriver.second - l);
- }
- for (const auto& toOtherPass : toOthersPass)
- {
- if (toOtherPass.second + l < p && used.find(toOtherPass.first) == used.end())
- {
- min_price = min(min_price,
- dfs(toOtherPass.first, l + toOtherPass.second, min_price, p, fromEachPassToDriverAndOtherPass,
- used));
- }
- }
- return min_price;
- }
- int main()
- {
- int m, n, p, k, s, t;
- cin >> m >> n >> p >> k >> s;
- map<int, pair<vector<pair<int, int>>, vector<pair<int, int>>>> fromEachPassToDriverAndOtherPass;
- for (int i = 0; i < s; ++i)
- {
- int t1, t2, t3;
- cin >> t1 >> t2 >> t3;
- fromEachPassToDriverAndOtherPass[t2].first.emplace_back(t1, t3);
- }
- cin >> t;
- for (int i = 0; i < t; ++i)
- {
- int t1, t2, t3;
- cin >> t1 >> t2 >> t3;
- fromEachPassToDriverAndOtherPass[t1].second.emplace_back(t2, t3);
- fromEachPassToDriverAndOtherPass[t2].second.emplace_back(t1, t3);
- }
- int min_price = k;
- for (const auto& pass : fromEachPassToDriverAndOtherPass)
- {
- int passId = pass.first;
- set<int> used;
- min_price = min(min_price, dfs(passId, 0, k, p, fromEachPassToDriverAndOtherPass, used));
- if (min_price <= 1)
- {
- cout << 1;
- return 0;
- }
- }
- cout << min_price;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement