답안 #253601

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
253601 2020-07-28T12:10:53 Z IgorI Cats or Dogs (JOI18_catdog) C++17
0 / 100
7 ms 12032 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int INF = 1e9;

int n;
vector<int> graph[500000];
int x[500000];

pair<int, int> calc(int v, int p)
{
    pair<int, int> ans0 = {0, 0};
    for (auto u : graph[v]) if (u != p)
    {
        pair<int, int> ans1 = calc(u, v);
        ans0.first += min(ans1.first, ans1.second + 1);
        ans0.second += min(ans1.first + 1, ans1.second);
    }
    if (x[v] == 0) ans0.second = INF;
    if (x[v] == 1) ans0.first = INF;
    return ans0;
}

void initialize(int n0, vector<int> a, vector<int> b)
{
    n = n0;
    for (int i = 0; i < n - 1; i++)
    {
        graph[a[i]].push_back(b[i]);
        graph[b[i]].push_back(a[i]);
    }
    for (int i = 0; i < n; i++)
    {
        x[i] = -1;
    }
}

int cat(int v)
{
    x[v] = 0;
    return min(calc(0, 0).first, calc(0, 0).second);
}

int dog(int v)
{
    x[v] = 1;
    return min(calc(0, 0).first, calc(0, 0).second);
}

int neighbor(int v)
{
    x[v] = -1;
    return min(calc(0, 0).first, calc(0, 0).second);
}

#ifdef LOCAL
int main()
{
    int n;
    cin >> n;
    vector<int> a(n - 1), b(n - 1);
    for (int i = 0; i < n - 1; i++)
    {
        cin >> a[i] >> b[i];
    }
    initialize(n, a, b);
}
#endif // LOCAL
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 12032 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 12032 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 12032 KB Output isn't correct
2 Halted 0 ms 0 KB -