답안 #342424

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
342424 2021-01-02T06:12:06 Z mjhmjh1104 Spring cleaning (CEOI20_cleaning) C++14
18 / 100
107 ms 21868 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]++;
    }
    cntChilds[0] += childs[0];
    if (!childs[0] && (int)c[0].size() == 1) cntChilds[0]++;
    for (int i = 1; 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--;
      |         ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 4972 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 5228 KB Output is correct
2 Correct 13 ms 5228 KB Output is correct
3 Correct 42 ms 10600 KB Output is correct
4 Correct 38 ms 8932 KB Output is correct
5 Correct 49 ms 10600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 5740 KB Output is correct
2 Correct 15 ms 6252 KB Output is correct
3 Correct 77 ms 21868 KB Output is correct
4 Correct 82 ms 20716 KB Output is correct
5 Correct 69 ms 20076 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 7020 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 54 ms 8812 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 107 ms 11116 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 4972 KB Output isn't correct
2 Halted 0 ms 0 KB -