QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#135725#5252. DeforestationUFRJ#WA 21ms25460kbC++201.9kb2023-08-05 23:18:522023-08-05 23:18:55

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-08-05 23:18:55]
  • 评测
  • 测评结果:WA
  • 用时:21ms
  • 内存:25460kb
  • [2023-08-05 23:18:52]
  • 提交

answer

#include "bits/stdc++.h"

using namespace std;

using lint = int64_t;

const int N = 100005;
vector<int> g[N];
lint b[N];
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    lint w;
    cin>>w;
    int n = 1;
    auto create = [&](int p, auto &self) -> void {
        int v = n++;
        g[p].push_back(v);
        lint cur;
        int child;
        cin>>cur>>child;
        b[v] = cur;
        for(int i =0; i<child; i++)
            self(v, self);
    };
    create(0, create);
    // for(int i =0; i<n; i++){
    //     cout<<i<<": \n ";
    //     for(int v : g[i]){
    //         cout<<v<<" ("<<b[v]<<"), ";
    //     }
    //     cout<<"\n";
    // }
    using pii = pair<lint, lint>;
    auto dfs = [&](int u, auto &self) -> pii {
        lint resto = 0, custo = 0;
        if(g[u].empty()){
            resto = b[u] % w;
            custo = b[u] / w;
            return {resto, custo};
        }
        vector<pii> child;
        child.reserve(g[u].size());
        for(int v : g[u])
            child.push_back(self(v, self));
        
        sort(child.begin(), child.end());
        lint sum_child = 0;
        int big_child = int(child.size()); 
        for(const auto &[r_child, c_child] : child){
            custo += c_child;
            if(sum_child + r_child <= w){
                sum_child += r_child;
                big_child--;
            }
        }
        if(sum_child + b[u] <= w){ // meu pai arruma
            return {sum_child + b[u], custo};
        }

        custo += big_child;

        //fix small child
        custo++;
        lint dif = w - sum_child;
        b[u] = max<lint>(0, b[u] - dif);

        resto = b[u] % w;
        custo += b[u] / w;

        return {resto, custo};
    };
    auto [resto, custo] = dfs(1, dfs);
    if(resto != 0)
        custo++;
    cout<<custo<<"\n";
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 11ms
memory: 7836kb

input:

999900000
7339 3
14947 2
12850 3
8986 10
11599 9
8889 10
10711 4
8015 1
11626 0
9492 1
7017 0
8863 0
8632 0
5321 5
9906 0
11687 0
9845 0
10469 0
11708 0
14950 5
11934 0
11922 0
13101 0
12000 0
9082 0
9273 5
12296 0
6119 0
9201 0
12652 0
12957 0
7454 5
12515 0
12976 0
10358 0
13997 0
8371 0
10181 5
8...

output:

1

result:

ok single line: '1'

Test #2:

score: 0
Accepted
time: 3ms
memory: 8336kb

input:

2
1 99999
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 ...

output:

99999

result:

ok single line: '99999'

Test #3:

score: 0
Accepted
time: 21ms
memory: 16744kb

input:

7
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10000 0
10000 2
10...

output:

142862500

result:

ok single line: '142862500'

Test #4:

score: 0
Accepted
time: 17ms
memory: 25460kb

input:

2
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10000 1
10...

output:

500000000

result:

ok single line: '500000000'

Test #5:

score: -100
Wrong Answer
time: 15ms
memory: 8676kb

input:

9717
14907 2
6953 2
10004 2
10949 2
11766 2
14015 2
5640 2
10370 2
6432 2
7602 2
10238 2
9755 2
5788 2
10885 2
11858 2
9182 2
14174 0
12614 0
12080 1
12497 0
7708 2
9108 1
14948 0
9107 1
13540 0
7400 2
6303 2
14462 1
8021 0
7659 1
7232 0
14314 2
9495 1
8459 0
13069 1
5777 0
12734 2
7061 2
12810 2
13...

output:

104458

result:

wrong answer 1st lines differ - expected: '105756', found: '104458'