Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <cmath>
- #include <map>
- #include <queue>
- #include <list>
- #include <set>
- #include <unordered_map>
- //freopen("in.txt", "r", stdin);
- //freopen("out.txt", "w", stdout);
- using namespace std;
- using ld = long double;
- using ll = long long;
- using ull = unsigned long long;
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- unordered_map<string, ull> p, cn, ans;
- unordered_map<string, string> pc;
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) {
- string s1, s2;
- ull a;
- cin >> s1 >> s2 >> a;
- p[s1] = a;
- cn[s2] += a;
- pc[s1] = s2;
- }
- // cout << p.size() << " " << cn.size() << " " << pc.size() << "\n";
- //
- // for (auto [s, i] : cn) {
- // cout << s << " " << i/1000000 << "\n";
- // }
- set<pair<ull,string>> q;
- for (pair<string, ull> p : cn) {
- string s = p.first;
- ull i = p.second;
- q.insert({i, s});
- }
- // if ((*(q.end()--)).first != (*(q.end())).first) {
- // ans[(*(q.end())).second]
- // }
- int m, k;
- cin >> m >> k;
- // cout << n << " " << m << " " << k << "\n";
- // cout << q.size() << "\n";
- int last = 0;
- for (int i = 0; i < k; i++) {
- int a;
- string s1, s2;
- cin >> a >> s1 >> s2;
- // cout << "\n";
- // cout << a << "\n";
- if ((q.size() == 1) || ((q.size() > 0) && ((*(--(--(q.end())))).first != (*(--(q.end()))).first))) {
- ans[(*(--(q.end()))).second] += a - last;
- // cout << "Hi " << (*(--(q.end()))).second << " " << a - last << "\n";
- }
- q.erase({cn[pc[s1]], pc[s1]});
- q.erase({cn[s2], s2});
- cn[pc[s1]] -= p[s1];
- cn[s2] += p[s1];
- q.insert({cn[pc[s1]], pc[s1]});
- q.insert({cn[s2], s2});
- pc[s1] = s2;
- last = a;
- // for (auto [s, i] : cn) {
- // cout << s << " " << i/1000000 << "\n";
- // }
- // ans["kuku"] = 239;
- }
- // ans["ku"] = 239;
- if ((q.size() == 1) || ((q.size() > 0) && ((*(--(--(q.end())))).first != (*(--(q.end()))).first))) {
- ans[(*(--(q.end()))).second] += m - last;
- }
- vector<pair<string, int>> ansv;
- for (pair<string, ull> p : ans) {
- string s = p.first;
- ull i = p.second;
- ansv.push_back({s, i});
- }
- sort(ansv.begin(), ansv.end());
- // cout << ans.size() << " " << ansv.size() << "\n";
- // cout << "\n";
- for (pair<string, int> p : ansv) {
- string s = p.first;
- int i = p.second;
- cout << s << " " << i << "\n";
- }
- return 0;
- }
- /*
- 5
- Abramovich London 15000000000
- Deripaska Moscow 10000000000
- Potanin Moscow 5000000000
- Berezovsky London 2500000000
- Khodorkovsky Chita 1000000000
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement