MAGCARI

Budget

Dec 12th, 2022
832
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. /*
  2.     Task    : Budget
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 12 December 2022 [20:00]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int u,v,w,st;
  11.     bool operator < (const A&o) const{
  12.         return w<o.w;
  13.     }
  14. };
  15. vector<A > edges;
  16. int p[3010];
  17. pair<int ,int > allPackages[300010];
  18. int findRoot(int now){
  19.     if(now == p[now])   return now;
  20.     else                return p[now] = findRoot(p[now]);
  21. }
  22. int main(){
  23.     cin.tie(0)->sync_with_stdio(0);
  24.     cin.exceptions(cin.failbit);
  25.     int b,e,s,t,l,r;
  26.     cin >> b >> e;
  27.     for(int i=0;i<b;i++)
  28.         p[i] = i;
  29.     for(int i=1;i<=e;i++){
  30.         cin >> s >> t >> l >> r;
  31.         edges.push_back({s,t,l,r});
  32.         if(r == 1){
  33.             int rs = findRoot(s);
  34.             int rt = findRoot(t);
  35.             p[rs] = rt;
  36.         }
  37.     }
  38.     int pack;
  39.     cin >> pack;
  40.     for(int i=1;i<=pack;i++)
  41.         cin >> allPackages[i].first >> allPackages[i].second;
  42.     sort(allPackages+1,allPackages+pack+1);
  43.     for(int i=pack-1;i>=1;i--)
  44.         allPackages[i].second = min(allPackages[i].second,allPackages[i+1].second);
  45.     for(int i=0;i<e;i++){
  46.         int idx = lower_bound(allPackages+1,allPackages+pack+1,make_pair(edges[i].w,0))-allPackages;
  47.         edges[i].w = allPackages[idx].second;
  48.     }
  49.     sort(edges.begin(),edges.end());
  50.     long long ans = 0;
  51.     for(int i=0;i<e;i++){
  52.         int ru = findRoot(edges[i].u);
  53.         int rv = findRoot(edges[i].v);
  54.         if(ru == rv)    continue;
  55.         ans+=edges[i].w;
  56.         p[ru] = rv;
  57.     }
  58.     cout << ans << '\n';
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment