Advertisement
7oSkaaa

E

Feb 25th, 2023
767
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define fixed(n) fixed << setprecision(n)
  6. #define ceil(n, m) (((n) + (m) - 1) / (m))
  7. #define add_mod(a, b, m) (((a % m) + (b % m)) % m)
  8. #define sub_mod(a, b, m) (((a % m) - (b % m) + m) % m)
  9. #define mul_mod(a, b, m) (((a % m) * (b % m)) % m)
  10. #define all(vec) vec.begin(), vec.end()
  11. #define rall(vec) vec.rbegin(), vec.rend()
  12. #define sz(x) int(x.size())
  13. #define debug(x) cout << #x << ": " << (x) << "\n";
  14. #define fi first
  15. #define se second
  16. #define ll long long
  17. #define ull unsigned long long
  18. #define EPS 1e-9
  19. constexpr int INF = 1 << 30, Mod = 1e9 + 7;
  20. constexpr ll LINF = 1LL << 62;
  21. #define PI acos(-1)
  22. template < typename T = int > using Pair = pair < T, T >;
  23. vector < string > RET = {"NO", "YES"};
  24.  
  25. template < typename T = int > istream& operator >> (istream &in, vector < T > &v) {
  26.     for (auto &x : v) in >> x;
  27.     return in;
  28. }
  29.  
  30. template < typename T = int > ostream& operator << (ostream &out, const vector < T > &v) {
  31.     for (const T &x : v) out << x << ' ';
  32.     return out;
  33. }
  34.  
  35. template < typename T = int, int Base = 1 > struct DSU {
  36.    
  37.     vector < T > parent, Gsize;
  38.  
  39.     DSU(int MaxNodes){
  40.         parent = Gsize = vector < T > (MaxNodes + 5);
  41.         for(int i = Base; i <= MaxNodes; i++)
  42.           parent[i] = i, Gsize[i] = 1;
  43.     }
  44.    
  45.     T find_leader(int node){
  46.         return parent[node] = (parent[node] == node ? node : find_leader(parent[node]));
  47.     }
  48.  
  49.     bool is_same_sets(int u, int v){
  50.         return find_leader(u) == find_leader(v);
  51.     }
  52.  
  53.     void union_sets(int u, int v){
  54.         int leader_u = find_leader(u), leader_v = find_leader(v);
  55.         if(leader_u == leader_v) return;
  56.         if(Gsize[leader_u] < Gsize[leader_v]) swap(leader_u, leader_v);
  57.         Gsize[leader_u] += Gsize[leader_v], parent[leader_v] = leader_u;
  58.     }
  59.  
  60.     int get_size(int u){
  61.         return Gsize[find_leader(u)];
  62.     }
  63. };
  64.  
  65. struct Edge {
  66.    
  67.     ll u, v, g, s;
  68.  
  69.     Edge(ll U = 0, ll V = 0, ll G = 0, ll S = 0) : u(U), v(V), g(G), s(S) {}
  70.  
  71.     bool operator < (const Edge &other) const {
  72.         return g < other.g;
  73.     }
  74. };
  75.  
  76. void Solve(){
  77.     int n, m;
  78.     cin >> n >> m;
  79.     ll G, S;
  80.     cin >> G >> S;
  81.     vector < Edge > edges(m);
  82.     for(auto& [u, v, g, s] : edges)
  83.         cin >> u >> v >> g >> s;
  84.     sort(all(edges));
  85.     vector < Edge > MST;
  86.     ll MinCost = LINF;
  87.     for(int i = 0; i < m; i++){
  88.         MST.push_back(edges[i]);
  89.         sort(all(MST), [](Edge a, Edge b){
  90.             return a.s < b.s;
  91.         });
  92.         DSU < ll > dsu(n);
  93.         vector < Edge > temp;
  94.         for(auto& [u, v, g, s] : MST){
  95.             if(!dsu.is_same_sets(u, v)){
  96.                 dsu.union_sets(u, v);
  97.                 temp.push_back({u, v, g, s});
  98.             }
  99.         }
  100.         MST = temp;
  101.         if(sz(MST) == n - 1)
  102.             MinCost = min(MinCost, edges[i].g * G + MST.back().s * S);
  103.     }
  104.     if(MinCost == LINF) cout << "LOSHA_FAILED\n";
  105.     else cout << MinCost << "\n";
  106. }
  107.  
  108. int main(){
  109.     ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  110.     int test_cases = 1;
  111.     // cin >> test_cases;
  112.     for(int tc = 1; tc <= test_cases; tc++){
  113.         // cout << "Case #" << tc << ": ";
  114.         Solve();
  115.     }
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement