QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#29221 | #2161. The Cost of Speed Limits | Hakujitsu | WA | 319ms | 13316kb | C++17 | 2.6kb | 2022-04-15 21:16:46 | 2022-04-28 14:12:25 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
void debug_out() {cerr << endl;}
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T)
{
cerr << " " << H;
debug_out(T...);
}
#ifndef ONLINE_JUDGE
#define debug(...) cerr << "{" << #__VA_ARGS__ << "}:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
using ll = long long;
const int maxn = 2e4 + 233;
vector<pair<int, int> > G[maxn];
ll dp[100][maxn];
ll best[maxn];
ll tmp[maxn];
vector<tuple<int, int, int> > edge;
int sz[maxn], d[maxn], son[maxn];
int top;
int n, m, c;
vector<int> lst;
int value[maxn];
void dfs1(int u, int fa){
d[u] = d[fa] + 1;
sz[u] = 1;
for(auto [v, w] : G[u]){
if(v == fa) continue;
dfs1(v, u);
value[v] = w;
sz[u] += sz[v];
if(sz[v] > sz[son[u]]) son[u] = v;
}
}
void dfs2(int u, int fa) {
if(u != 1 && G[u].size() == 1) {
return;
}
int id = top;
if(son[u]) {
dfs2(son[u], u);
for (int i = 0; i <= m; i += 1) {
tmp[i] = 1e12;
}
tmp[0] = best[son[u]] + c;
for (int i = value[son[u]]; i <= m; i += 1) {
tmp[i] = min(dp[top][i], dp[top][0] + c) + lst[i - 1] - lst[value[son[u]] - 1];
}
memcpy(dp[id], tmp, sizeof(tmp));
}
for (auto [v, w] : G[u]) {
if(v == fa || v == son[u]) continue;
top += 1;
dfs2(v, u);
for (int i = 1; i < w; i += 1) {
dp[id][i] = 1e12;
}
for (int i = w; i <= m; i += 1) {
dp[id][i] += min(dp[top][i] , dp[top][0] + c) + lst[i - 1] - lst[w - 1];
}
dp[id][0] += best[v] + c;
top -= 1;
}
best[u] = dp[id][0] + c;
for (int i = value[u]; i <= m; i += 1) {
best[u] = min(best[u], dp[id][i] + lst[i - 1] - lst[value[u] - 1]);
}
}
int main(){
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n >> c;
for (int i = 1; i < n; i += 1){
int u, v, w;
cin >> u >> v >> w;
edge.emplace_back(u, v, w);
lst.emplace_back(w);
}
sort(lst.begin(), lst.end());
lst.erase(unique(lst.begin(), lst.end()), lst.end());
m = lst.size();
for (auto [u, v, w] : edge) {
int p = lower_bound(lst.begin(), lst.end(), w) - lst.begin() + 1;
G[u].emplace_back(v, p);
G[v].emplace_back(u, p);
}
value[1] = 1;
dfs1(1, 0);
dfs2(1, 0);
ll res = 1e15;
for (int i = 0; i <= m; i += 1) {
res = min(res, dp[top][i]);
}
cout << res << "\n";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 4412kb
input:
13 20 1 8 101 1 9 30 1 2 100 1 3 100 2 4 75 2 5 70 2 6 82 2 7 77 3 10 73 3 11 69 3 12 83 3 13 79
output:
272
result:
ok single line: '272'
Test #2:
score: 0
Accepted
time: 3ms
memory: 4300kb
input:
9 10 1 6 26 2 6 27 3 6 28 4 6 29 5 6 30 7 9 14 8 9 1 9 6 10
output:
60
result:
ok single line: '60'
Test #3:
score: 0
Accepted
time: 3ms
memory: 7988kb
input:
7 64 2 1 194 3 1 187 4 2 158 5 1 42 6 5 101 7 5 80
output:
308
result:
ok single line: '308'
Test #4:
score: 0
Accepted
time: 3ms
memory: 4256kb
input:
6 32 2 1 110 3 2 36 4 1 54 5 3 101 6 5 71
output:
178
result:
ok single line: '178'
Test #5:
score: 0
Accepted
time: 204ms
memory: 11012kb
input:
20000 100 2273 4097 98627 14155 14055 33506 16060 6363 28081 14840 12695 23379 11520 7892 5831 6633 13834 73944 19218 19341 62064 14392 160 58289 18147 209 46443 16941 5453 55103 11895 12849 31201 10275 1622 71781 19595 6349 14232 19485 10800 9778 10745 13541 44786 18727 15264 25726 5847 12815 43894...
output:
2999800
result:
ok single line: '2999800'
Test #6:
score: 0
Accepted
time: 313ms
memory: 9976kb
input:
20000 1000 1 2 99998 2 3 99994 3 4 99992 4 5 99989 5 6 99987 6 7 99983 7 8 99982 8 9 99978 9 10 99973 10 11 99970 11 12 99965 12 13 99961 13 14 99957 14 15 99954 15 16 99949 16 17 99946 17 18 99945 18 19 99940 19 20 99935 20 21 99932 21 22 99927 22 23 99923 23 24 99920 24 25 99919 25 26 99918 26 27 ...
output:
2088429
result:
ok single line: '2088429'
Test #7:
score: 0
Accepted
time: 319ms
memory: 9996kb
input:
20000 1000 1 2 4 2 3 6 3 4 9 4 5 13 5 6 15 6 7 17 7 8 22 8 9 23 9 10 27 10 11 28 11 12 31 12 13 36 13 14 38 14 15 39 15 16 44 16 17 46 17 18 49 18 19 52 19 20 55 20 21 60 21 22 62 22 23 64 23 24 67 24 25 68 25 26 71 26 27 72 27 28 76 28 29 77 29 30 82 30 31 86 31 32 89 32 33 90 33 34 95 34 35 96 35 ...
output:
2098509
result:
ok single line: '2098509'
Test #8:
score: 0
Accepted
time: 7ms
memory: 5300kb
input:
20000 100000 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 1 1 24 1 1 25 1 1 26 1 1 27 1 1 28 1 1 29 1 1 30 1 1 31 1 1 32 1 1 33 1 1 34 1 1 35 1 1 36 1 1 37 1 1 38 1 1 39 1 1 40 1 1 41 1 1 42 1 1 43 1 1 44 1 1 45 1...
output:
1999780001
result:
ok single line: '1999780001'
Test #9:
score: 0
Accepted
time: 86ms
memory: 13316kb
input:
20000 100 1 2 114 2 3 243 3 4 243 4 5 239 5 6 248 6 7 122 7 8 187 8 9 281 9 10 241 10 11 209 11 12 119 12 13 241 13 14 243 14 15 236 15 16 151 16 17 272 17 18 132 18 19 281 19 20 272 20 21 194 21 22 233 22 23 220 23 24 271 24 25 278 25 26 153 26 27 108 27 28 229 28 29 130 29 30 291 30 31 245 31 32 2...
output:
1636347
result:
ok single line: '1636347'
Test #10:
score: 0
Accepted
time: 1ms
memory: 4104kb
input:
1 12345
output:
0
result:
ok single line: '0'
Test #11:
score: 0
Accepted
time: 4ms
memory: 4304kb
input:
9 50 1 2 1000 2 3 995 3 4 990 4 5 998 5 6 993 6 7 991 7 8 996 8 9 999
output:
38
result:
ok single line: '38'
Test #12:
score: 0
Accepted
time: 1ms
memory: 7900kb
input:
9 1 1 2 1000 2 3 995 3 4 990 4 5 998 5 6 993 6 7 991 7 8 996 8 9 999
output:
14
result:
ok single line: '14'
Test #13:
score: 0
Accepted
time: 4ms
memory: 4252kb
input:
14 50 2 12 930 2 13 951 2 14 920 2 3 999 3 4 995 4 5 990 6 5 1000 6 7 995 7 8 990 8 9 998 9 10 900 9 11 901 9 1 1001
output:
432
result:
ok single line: '432'
Test #14:
score: 0
Accepted
time: 4ms
memory: 6268kb
input:
14 50 2 12 930 2 13 951 2 14 920 2 3 999 3 4 995 4 5 990 6 5 1000 6 7 995 7 8 990 8 9 998 9 10 911 9 11 911 9 1 1001
output:
420
result:
ok single line: '420'
Test #15:
score: 0
Accepted
time: 3ms
memory: 4248kb
input:
4 16 2 1 2 3 1 20 4 2 3
output:
33
result:
ok single line: '33'
Test #16:
score: 0
Accepted
time: 3ms
memory: 4200kb
input:
4 1 1 2 4 2 3 1 3 4 4
output:
3
result:
ok single line: '3'
Test #17:
score: 0
Accepted
time: 1ms
memory: 4236kb
input:
3 1 1 2 4242 2 3 4242
output:
0
result:
ok single line: '0'
Test #18:
score: 0
Accepted
time: 3ms
memory: 4200kb
input:
3 13 2 3 1234 3 1 1261
output:
26
result:
ok single line: '26'
Test #19:
score: 0
Accepted
time: 4ms
memory: 8024kb
input:
3 13 2 3 1234 3 1 1259
output:
25
result:
ok single line: '25'
Test #20:
score: 0
Accepted
time: 0ms
memory: 4224kb
input:
2 10 1 2 3
output:
0
result:
ok single line: '0'
Test #21:
score: 0
Accepted
time: 1ms
memory: 4292kb
input:
6 10 1 2 42 1 3 42 1 4 42 1 5 42 1 6 42
output:
0
result:
ok single line: '0'
Test #22:
score: 0
Accepted
time: 3ms
memory: 7824kb
input:
6 8 1 2 42 1 3 42 1 4 41 1 5 42 1 6 52
output:
40
result:
ok single line: '40'
Test #23:
score: 0
Accepted
time: 4ms
memory: 7676kb
input:
6 8 1 2 42 1 3 42 1 4 43 1 5 42 1 6 52
output:
39
result:
ok single line: '39'
Test #24:
score: -100
Wrong Answer
time: 75ms
memory: 7532kb
input:
20000 114 17256 6284 130 7416 2964 121 2817 1233 60 19820 1850 55 4446 5382 66 634 17207 65 2229 8149 55 10126 13119 92 16897 17923 120 8466 11376 89 11398 9509 76 19710 2954 82 11765 4918 129 16179 4846 72 10760 928 132 9676 2592 127 279 924 87 8927 147 70 13174 8697 119 2473 2591 143 14540 250 112...
output:
2195211
result:
wrong answer 1st lines differ - expected: '976682', found: '2195211'