MAGCARI

Budget

Nov 23rd, 2022
847
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. /*
  2.     Task    : _example
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 23 November 2022 [21:21]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int u,v,w;
  11.     bool operator < (const A&o) const{
  12.         return w > o.w;
  13.     }
  14. };
  15. priority_queue<A > heap;
  16. vector<A > g;
  17. vector<pair<int ,int > > pack;
  18. int p[3010],a[500010];
  19. int findroot(int u){
  20.     if(p[u] == u)   return u;
  21.     else            return p[u] = findroot(p[u]);
  22. }
  23. int main(){
  24.     int n,m,u,v,w,state,ru,rv,k;
  25.     scanf("%d %d",&n,&m);
  26.     for(int i=0;i<n;i++)
  27.         p[i] = i;
  28.     while(m--){
  29.         scanf("%d %d %d %d",&u,&v,&w,&state);
  30.         if(state == 1){
  31.             ru = findroot(u);
  32.             rv = findroot(v);
  33.             p[ru] = rv;
  34.         }else{
  35.             g.push_back({u,v,w});
  36.         }
  37.     }
  38.     scanf("%d",&k);
  39.     for(int i=1;i<=k;i++){
  40.         scanf("%d %d",&u,&v);
  41.         pack.push_back({u,v});
  42.     }
  43.     sort(pack.begin(),pack.end());
  44.     a[k] = pack.back().first;
  45.     for(int i=pack.size()-2;i>=0;i--){
  46.         pack[i].second = min(pack[i].second,pack[i+1].second);
  47.         a[i] = pack[i].first;
  48.     }
  49.     for(auto x:g){
  50.         w = lower_bound(a,a+k,x.w)-a;
  51.         heap.push({x.u,x.v,pack[w].second});
  52.     }
  53.     long long ans = 0;
  54.     while(!heap.empty()){
  55.         auto now = heap.top();
  56.         heap.pop();
  57.         ru = findroot(now.u);
  58.         rv = findroot(now.v);
  59.         if(ru == rv)    continue;
  60.         ans+=now.w;
  61.         p[ru] = rv;
  62.     }
  63.     printf("%lld\n",ans);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment