Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- nt minCostPath(int n, vector<int> ta, vector<int> tb, vector<int> tc, int x, int y) {
- vector<vector<int>> data;
- vector<pair<int, int>> a[n+1];
- for(int i = 0; i < ta.size(); i++) {
- a[ta[i]].push_back({tb[i], tc[i]});
- a[tb[i]].push_back({ta[i], tc[i]});
- }
- auto fun = [&] (int start) {
- set<pair<int, int>> st;
- vector<bool> vis(n+1, 0);
- vector<int> dis(n+1, 1000000007);
- dis[start] = 0;
- st.insert({dis[start], start});
- int node;
- while(!st.empty()) {
- node = st.begin() -> second;
- st.erase(st.begin());
- if(vis[node]) {
- continue;
- }
- vis[node] = 1;
- for(auto i : a[node]) {
- if(dis[i.first] > dis[node] + i.second) {
- dis[i.first] = dis[node] + i.second;
- st.insert({dis[i.first], i.first});
- }
- }
- }
- data.push_back(dis);
- };
- fun(1);
- fun(n);
- fun(x);
- return (min(data[0][x] + data[1][y], data[1][x] + data[0][y]) + data[x][y]);
- }
Advertisement
Add Comment
Please, Sign In to add comment