sacgajcvs

Untitled

Oct 24th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. nt minCostPath(int n, vector<int> ta, vector<int> tb, vector<int> tc, int x, int y) {
  2. vector<vector<int>> data;
  3. vector<pair<int, int>> a[n+1];
  4. for(int i = 0; i < ta.size(); i++) {
  5. a[ta[i]].push_back({tb[i], tc[i]});
  6. a[tb[i]].push_back({ta[i], tc[i]});
  7. }
  8. auto fun = [&] (int start) {
  9. set<pair<int, int>> st;
  10. vector<bool> vis(n+1, 0);
  11. vector<int> dis(n+1, 1000000007);
  12. dis[start] = 0;
  13. st.insert({dis[start], start});
  14. int node;
  15. while(!st.empty()) {
  16. node = st.begin() -> second;
  17. st.erase(st.begin());
  18. if(vis[node]) {
  19. continue;
  20. }
  21. vis[node] = 1;
  22. for(auto i : a[node]) {
  23. if(dis[i.first] > dis[node] + i.second) {
  24. dis[i.first] = dis[node] + i.second;
  25. st.insert({dis[i.first], i.first});
  26. }
  27. }
  28. }
  29. data.push_back(dis);
  30. };
  31. fun(1);
  32. fun(n);
  33. fun(x);
  34. return (min(data[0][x] + data[1][y], data[1][x] + data[0][y]) + data[x][y]);
  35. }
Advertisement
Add Comment
Please, Sign In to add comment