Submission #161204

# Submission time Handle Problem Language Result Execution time Memory
161204 2019-11-01T12:11:06 Z Minnakhmetov Mousetrap (CEOI17_mousetrap) C++14
25 / 100
1223 ms 59076 KB
#include <bits/stdc++.h>
    
#define ll long long
#define all(aaa) aaa.begin(), aaa.end()
 
using namespace std;
 
const int N = 1e6 + 5;
vector<int> g[N];
int n, m, t;
bool term[N];

void dive(int node, int anc) {
    if (node == t)
        term[node] = 1;
    for (int to : g[node]) {
        if (to != anc) {
            dive(to, node);
            if (term[to])
                term[node] = 1;
        }
    }
}
 
int dfs(int node, int anc) {
    int adj = g[node].size() - (anc != -1);
 
    vector<int> v;
 
    for (int to : g[node]) {
        if (to != anc) {
            v.push_back(dfs(to, node) + 1);
        }
    }
 
    sort(v.rbegin(), v.rend());
 
    if (v.empty())
        return 0;
    else if (v.size() == 1)
        return 1;
    return v[1] + adj - 1;
}

int walk(int node, int anc) {
    if (node == t)
        return 0;

    vector<int> v;
    int ans = 0, bl = 0;

    for (int to : g[node]) {
        if (to != anc) {
            if (term[to]) {
                ans += walk(to, node);
                // if (to == 1) {
                //     cout << walk(to, node) << "\n";
                // }
            }
            else {
                bl++;
                v.push_back(dfs(to, node) + 1);                
            }
        }
    }

    if (v.size() == 1) {
        ans++;
    }
    else if (!v.empty()) {
        sort(v.rbegin(), v.rend());
        ans += v[1] + bl - 1;
    }

    // if (node == 3) {
    //     cout << v[1] << "\n";
    // }

    // cout << node + 1 << " " << ans << "\n";

    return ans;
}
 
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
 
    cin >> n >> t >> m;
 
    m--, t--;
 
    for (int i = 0; i < n - 1; i++) {
        int a, b;
        cin >> a >> b;
        a--, b--;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    dive(m, -1);
    cout << walk(m, -1);
 
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 25 ms 23800 KB Output is correct
3 Correct 24 ms 23800 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Incorrect 25 ms 23800 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 615 ms 57768 KB Output is correct
2 Correct 466 ms 54652 KB Output is correct
3 Correct 1200 ms 59000 KB Output is correct
4 Correct 553 ms 41464 KB Output is correct
5 Correct 1192 ms 59076 KB Output is correct
6 Correct 1223 ms 58936 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 25 ms 23800 KB Output is correct
3 Correct 24 ms 23800 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Incorrect 25 ms 23800 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 25 ms 23800 KB Output is correct
3 Correct 24 ms 23800 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Incorrect 25 ms 23800 KB Output isn't correct
6 Halted 0 ms 0 KB -