QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#29221#2161. The Cost of Speed LimitsHakujitsuWA 319ms13316kbC++172.6kb2022-04-15 21:16:462022-04-28 14:12:25

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-28 14:12:25]
  • 评测
  • 测评结果:WA
  • 用时:319ms
  • 内存:13316kb
  • [2022-04-15 21:16:46]
  • 提交

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;
}

详细

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'