| 提出番号 | 1203 |
|---|---|
| 提出者 | square1001 |
| 言語 | C++ |
| 提出日時 | 2018-05-18 21:11:29 |
| 問題名 | (52)fireworks(花火) |
| 結果 | MLE |
| 点数 | 55% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 100% | 13ms | 89360KB |
| 2 | AC | 100% | 16ms | 89360KB |
| 3 | AC | 100% | 15ms | 89456KB |
| 4 | AC | 100% | 13ms | 89456KB |
| 5 | AC | 100% | 14ms | 89440KB |
| 6 | AC | 100% | 14ms | 89440KB |
| 7 | AC | 100% | 13ms | 89440KB |
| 8 | AC | 100% | 12ms | 89440KB |
| 9 | AC | 100% | 12ms | 89456KB |
| 10 | AC | 100% | 12ms | 89440KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 11 | AC | 100% | 14ms | 89360KB |
| 12 | AC | 100% | 14ms | 89376KB |
| 13 | AC | 100% | 13ms | 89392KB |
| 14 | AC | 100% | 14ms | 89408KB |
| 15 | AC | 100% | 13ms | 89392KB |
| 16 | AC | 100% | 16ms | 89408KB |
| 17 | AC | 100% | 13ms | 89424KB |
| 18 | AC | 100% | 14ms | 89440KB |
| 19 | AC | 100% | 13ms | 89456KB |
| 20 | AC | 100% | 12ms | 89456KB |
| 21 | AC | 100% | 14ms | 89472KB |
| 22 | AC | 100% | 15ms | 89472KB |
| 23 | AC | 100% | 14ms | 89504KB |
| 24 | AC | 100% | 15ms | 89504KB |
| 25 | AC | 100% | 12ms | 89424KB |
| 26 | AC | 100% | 16ms | 89536KB |
| 27 | AC | 100% | 13ms | 89520KB |
| 28 | AC | 100% | 14ms | 89520KB |
| 29 | AC | 100% | 12ms | 89504KB |
| 30 | AC | 100% | 12ms | 89520KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 31 | AC | 100% | 12ms | 89584KB |
| 32 | AC | 100% | 14ms | 89856KB |
| 33 | AC | 100% | 14ms | 90112KB |
| 34 | AC | 100% | 14ms | 90400KB |
| 35 | AC | 100% | 15ms | 90688KB |
| 36 | AC | 100% | 16ms | 91008KB |
| 37 | AC | 100% | 14ms | 91248KB |
| 38 | AC | 100% | 14ms | 91680KB |
| 39 | AC | 100% | 19ms | 91696KB |
| 40 | AC | 100% | 16ms | 91728KB |
| 41 | AC | 100% | 13ms | 90240KB |
| 42 | AC | 100% | 15ms | 90240KB |
| 43 | AC | 100% | 15ms | 90288KB |
| 44 | AC | 100% | 14ms | 91408KB |
| 45 | AC | 100% | 14ms | 91504KB |
| 46 | AC | 100% | 17ms | 91488KB |
| 47 | AC | 100% | 16ms | 93584KB |
| 48 | AC | 100% | 18ms | 93504KB |
| 49 | AC | 100% | 15ms | 93008KB |
| 50 | AC | 100% | 17ms | 93424KB |
| 51 | AC | 100% | 15ms | 92592KB |
| 52 | AC | 100% | 17ms | 92512KB |
| 53 | AC | 100% | 17ms | 92816KB |
| 54 | AC | 100% | 17ms | 92960KB |
| 55 | AC | 100% | 16ms | 93616KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 56 | AC | 100% | 25ms | 95712KB |
| 57 | AC | 100% | 43ms | 114144KB |
| 58 | AC | 100% | 73ms | 133120KB |
| 59 | AC | 100% | 87ms | 146848KB |
| 60 | AC | 100% | 150ms | 165856KB |
| 61 | AC | 100% | 165ms | 185920KB |
| 62 | AC | 100% | 167ms | 199648KB |
| 63 | AC | 100% | 208ms | 213376KB |
| 64 | AC | 100% | 248ms | 240832KB |
| 65 | AC | 100% | 258ms | 241888KB |
| 66 | AC | 100% | 116ms | 140880KB |
| 67 | AC | 100% | 117ms | 140880KB |
| 68 | AC | 100% | 119ms | 141376KB |
| 69 | AC | 100% | 234ms | 210208KB |
| 70 | AC | 100% | 238ms | 212320KB |
| 71 | AC | 100% | 222ms | 212320KB |
| 72 | MLE | 0% | 328ms | 391840KB |
| 73 | MLE | 0% | 321ms | 391840KB |
| 74 | MLE | 0% | 305ms | 343264KB |
| 75 | MLE | 0% | 307ms | 343264KB |
| 76 | MLE | 0% | 353ms | 341152KB |
| 77 | MLE | 0% | 306ms | 342208KB |
| 78 | MLE | 0% | 366ms | 330592KB |
| 79 | MLE | 0% | 341ms | 321360KB |
| 80 | MLE | 0% | 504ms | 342400KB |
#include <set>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int N, M, p[300009], c[300009], id[300009]; vector<int> g[300009]; multiset<long long> v[300009];
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin >> N >> M;
long long sum = 0;
for (int i = 1; i < N + M; i++) {
cin >> p[i] >> c[i];
g[--p[i]].push_back(i);
sum += c[i];
if (i >= N) {
v[i - N].insert(c[i]);
v[i - N].insert(c[i]);
id[i] = i - N;
}
}
for (int i = N - 1; i >= 0; i--) {
int mx = 0;
for (int j : g[i]) {
if (mx < v[id[j]].size()) {
mx = v[id[j]].size();
id[i] = id[j];
}
}
for (int j : g[i]) {
if (id[j] != id[i]) {
int sz = v[id[i]].size();
v[id[i]].insert(v[id[j]].begin(), v[id[j]].end());
}
}
multiset<long long>::iterator it = --v[id[i]].end();
for (int j = 1; j < g[i].size(); j++) {
it = --v[id[i]].erase(it);
}
long long va = *it; it = --v[id[i]].erase(it);
long long vb = *it; it = --v[id[i]].erase(it);
v[id[i]].insert(va + c[i]);
v[id[i]].insert(vb + c[i]);
}
vector<long long> res(v[id[0]].begin(), v[id[0]].end());
for (int i = 0; i < res.size(); i++) {
sum -= (res[i] - (i == 0 ? 0 : res[i - 1])) * (res.size() - i - 1);
}
cout << sum << '\n';
return 0;
}