Advertisement
Sergey101

Q2v2

Jan 30th, 2025
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef int_fast64_t lli;
  4.  
  5. int main()
  6. {
  7.     ios_base::sync_with_stdio(false);
  8.     cin.tie(nullptr);
  9.     cout.tie(nullptr);
  10.  
  11.     lli a, n, m;
  12.     cin >> a >> n >> m;
  13.  
  14.     vector<tuple<string, string, lli>> quotations;
  15.     unordered_map<string, unordered_map<string, lli>> direct;
  16.  
  17.     for(lli i = 0; i < n; i++)
  18.     {
  19.         string s1, s2;
  20.         lli w;
  21.         cin >> s1 >> s2 >> w;
  22.         quotations.emplace_back(s1, s2, w);
  23.         if(direct[s1].find(s2) == direct[s1].end())
  24.         {
  25.             direct[s1][s2] = w;
  26.         }
  27.         else
  28.         {
  29.             direct[s1][s2] = min(direct[s1][s2], w);
  30.         }
  31.     }
  32.  
  33.     for(lli i = 0; i < m; ++i)
  34.     {
  35.         string s1, s2;
  36.         lli w;
  37.         cin >> s1 >> s2 >> w;
  38.         if(direct[s1].find(s2) == direct[s1].end())
  39.         {
  40.             direct[s1][s2] = w;
  41.         }
  42.         else
  43.         {
  44.             direct[s1][s2] = min(direct[s1][s2], w);
  45.         }
  46.     }
  47.  
  48.     lli ans = 0;
  49.     for(auto &quote : quotations)
  50.     {
  51.         string s1 = get<0>(quote);
  52.         string s2 = get<1>(quote);
  53.         lli price = get<2>(quote);
  54.  
  55.         lli minimal_price = 1e10;
  56.  
  57.         if(direct[s1].count(s2))
  58.         {
  59.             minimal_price = direct[s1][s2];
  60.         }
  61.  
  62.         if(direct.count(s1))
  63.         {
  64.             for(auto &x_entry : direct[s1])
  65.             {
  66.                 string x = x_entry.first;
  67.                 lli cost_s1_x = x_entry.second;
  68.                 if(direct.count(x) && direct[x].count(s2))
  69.                 {
  70.                     lli cost_x_s2 = direct[x][s2];
  71.                     minimal_price = min(minimal_price, cost_s1_x + cost_x_s2);
  72.                 }
  73.             }
  74.         }
  75.  
  76.         ans += price - minimal_price;
  77.     }
  78.  
  79.     cout << ans << '\n';
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement