답안 #596994

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
596994 2022-07-15T11:16:27 Z OttoTheDino Mousetrap (CEOI17_mousetrap) C++17
0 / 100
252 ms 55068 KB
#include <bits/stdc++.h>
using namespace std;

#define rep(i,s,e)                  for (int i = s; i <= e; ++i)
#define rrep(i,s,e)                 for (int i = s; i >= e; --i)
#define pb                          push_back
#define all(a)                      a.begin(), a.end()
#define len(a)                      (int)a.size()
typedef vector<int> vi;

const int mx = 1e6;
vi adj[mx+1], road;
int n, t, m;

bool dfs (int u, int p) {
    if (u==t) return 1;
    for (int v : adj[u]) {
        if (v==p) continue;
        if (dfs (v, u)) {
            road.pb(u);
            return 1;
        }
    }
    return 0;
}

int dfs2 (int u, int p) {
    if (len(adj[u])==2) return 1;

    int ma = 0;
    for (int v : adj[u]) {
        if (v==p) continue;
        ma = max(ma, dfs2 (v, u));
    }

    ma += len(adj[u])-1;

    return ma;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> t >> m;

    rep (i,1,n-1) {
        int u, v; cin >> u >> v;
        adj[u].pb(v);
        adj[v].pb(u);
    }

    dfs (m,-1);

    int l = len(road), s = 0;
    vi dp[l];

    reverse(all(road));
    road.pb(t);

    rrep (i,l-1,0) {
        s += len(adj[road[i]])-2;
        for (int v : adj[road[i]]) {
            if ((i>0 && v==road[i-1]) || v==road[i+1]) continue;
            dp[i].pb(dfs2(v,road[i])+s+1);
        }
        sort(all(dp[i]), greater<int>());
    }

    int lo = 0, hi = mx;
    if (len(dp[0])) lo = dp[0][0]; 

    while (lo<hi) {
        int mid = (lo+hi)/2, x = 0, suc = 1;
        rep (i,1,l-1) {
            x++;
            for (int j : dp[i]) if (j>mid) x--;
            suc &= (x>=0);
        }
        if (suc) hi = mid;
        else lo = mid+1;
    }

    cout << lo << "\n";

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 23764 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 252 ms 55068 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 23764 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 23764 KB Output isn't correct
2 Halted 0 ms 0 KB -