Submission #342420

# Submission time Handle Problem Language Result Execution time Memory
342420 2021-01-02T06:08:37 Z mjhmjh1104 Spring cleaning (CEOI20_cleaning) C++14
9 / 100
88 ms 11008 KB
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int MAX = 100006;

int n, q, d, childs[MAX], cntChilds[MAX], depth[MAX], totalChilds[MAX];
vector<int> adj[MAX], c[MAX];

void dfs(int x, int prev = -1) {
    for (auto &i: adj[x]) if (i != prev) {
        depth[i] = depth[x] + 1;
        dfs(i, x);
        c[x].push_back(i);
    }
}

void dfs1(int x) {
    totalChilds[x] = cntChilds[x];
    for (auto &i: c[x]) {
        dfs1(i);
        totalChilds[x] += totalChilds[i];
    }
}

int main() {
    scanf("%d%d", &n, &q);
    for (int i = 0; i < n - 1; i++) {
        int a, b;
        scanf("%d%d", &a, &b);
        a--, b--;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    dfs(0);

    scanf("%d", &d);
    for (int i = 0; i < d; i++) {
        int x;
        scanf("%d", &x); x--;
        childs[x]++;
    }
    for (int i = 0; i < n; i++) {
        cntChilds[i] += childs[i];
        if (!childs[i] && c[i].empty()) cntChilds[i]++;
    }
    dfs1(0);
    if (totalChilds[0] % 2) return puts("-1"), 0;
    long long res = d;
    for (int i = 1; i < n; i++) {
        int t = totalChilds[i];
        if (t > 2) t -= (t - 1) / 2 * 2;
        res += t;
    }
    printf("%lld", res);
}

Compilation message

cleaning.cpp: In function 'int main()':
cleaning.cpp:28:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |     scanf("%d%d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~
cleaning.cpp:31:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   31 |         scanf("%d%d", &a, &b);
      |         ~~~~~^~~~~~~~~~~~~~~~
cleaning.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |     scanf("%d", &d);
      |     ~~~~~^~~~~~~~~~
cleaning.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   41 |         scanf("%d", &x); x--;
      |         ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 4972 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 5228 KB Output is correct
2 Correct 14 ms 5244 KB Output is correct
3 Correct 40 ms 10600 KB Output is correct
4 Correct 39 ms 8932 KB Output is correct
5 Correct 51 ms 10600 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 15 ms 5740 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 15 ms 7020 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 47 ms 8940 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 88 ms 11008 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 4972 KB Output isn't correct
2 Halted 0 ms 0 KB -