답안 #419017

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
419017 2021-06-06T10:40:22 Z egekabas Mousetrap (CEOI17_mousetrap) C++14
20 / 100
5000 ms 89984 KB
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<ll, ll> pii;
typedef pair<ld, ld> pld;
ll n, t, m;
vector<ll> g[1000009];
ll trap[1000009];
ll dp[1000009];
ll edgecnt[1000009];

void dfs(ll v, ll prt){
    if(v == t){
        trap[v] = 1;
        return;
    }
    for(auto u : g[v])
        if(u != prt){
            dfs(u, v);
            if(trap[u])
                trap[v] = 1;
            else
                ++edgecnt[v];
        }
    dp[v] = edgecnt[v];
    for(auto u : g[v])
        if(u != prt && trap[u])
            dp[v] += dp[u];
}
ll getans(ll v, ll prt, ll curval){
    if(v == t) return 0;
    if(trap[v] == 0)
        curval -= edgecnt[v];
    if(curval < 0){
        //cout << v << ' ' << 1e9 << '\n';
        return 1e9;
    }
    ll sum = 0;
    for(auto u : g[v])
        if(u != prt && trap[u] == 0){
            sum += min(1LL, getans(u, v, curval));
        }
        
    for(auto u : g[v])
        if(u != prt && trap[u])
            sum += getans(u, v, curval);
    
    //cout << v << ' ' << min((ll)1e9, max(sum-1, 0LL)) << '\n';
    return min((ll)1e9, max(sum-1, 0LL));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);

    cin >> n >> t >> m;
    for(ll i = 0; i < n-1; ++i){
        ll x, y;
        cin >> x >> y;
        g[x].pb(y);
        g[y].pb(x);
    }
    dfs(m, 0);
    ll l = 0, r = 1e9;
    while(l < r){
        ll mid = (l+r)/2;
        if(getans(m, 0, mid-dp[m]) == 0)
            r = mid;
        else
            l = mid+1;
    }
    cout << l << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 23756 KB Output is correct
2 Correct 14 ms 23772 KB Output is correct
3 Correct 14 ms 23816 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23756 KB Output is correct
6 Correct 16 ms 23756 KB Output is correct
7 Correct 13 ms 23804 KB Output is correct
8 Correct 14 ms 23756 KB Output is correct
9 Correct 16 ms 23756 KB Output is correct
10 Correct 13 ms 23804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 817 ms 74684 KB Output is correct
2 Correct 781 ms 81656 KB Output is correct
3 Execution timed out 5086 ms 89984 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 23756 KB Output is correct
2 Correct 14 ms 23772 KB Output is correct
3 Correct 14 ms 23816 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23756 KB Output is correct
6 Correct 16 ms 23756 KB Output is correct
7 Correct 13 ms 23804 KB Output is correct
8 Correct 14 ms 23756 KB Output is correct
9 Correct 16 ms 23756 KB Output is correct
10 Correct 13 ms 23804 KB Output is correct
11 Correct 15 ms 23788 KB Output is correct
12 Correct 15 ms 23884 KB Output is correct
13 Correct 14 ms 23876 KB Output is correct
14 Correct 15 ms 23884 KB Output is correct
15 Correct 14 ms 23916 KB Output is correct
16 Incorrect 15 ms 23828 KB Output isn't correct
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 23756 KB Output is correct
2 Correct 14 ms 23772 KB Output is correct
3 Correct 14 ms 23816 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23756 KB Output is correct
6 Correct 16 ms 23756 KB Output is correct
7 Correct 13 ms 23804 KB Output is correct
8 Correct 14 ms 23756 KB Output is correct
9 Correct 16 ms 23756 KB Output is correct
10 Correct 13 ms 23804 KB Output is correct
11 Correct 817 ms 74684 KB Output is correct
12 Correct 781 ms 81656 KB Output is correct
13 Execution timed out 5086 ms 89984 KB Time limit exceeded
14 Halted 0 ms 0 KB -