답안 #597042

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
597042 2022-07-15T12:17:53 Z OttoTheDino Mousetrap (CEOI17_mousetrap) C++17
0 / 100
312 ms 57404 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 len(adj[u])-1;
 
    vi nxt;
    for (int v : adj[u]) {
        if (v==p) continue;
        nxt.pb(dfs2 (v, u));
    }
 
    sort(all(nxt),greater<int>());
 
    return nxt[1]+len(adj[u])-1;
}
 
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 += max(len(adj[road[i]])-2,0);
        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 = s, 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 Correct 13 ms 23764 KB Output is correct
2 Correct 15 ms 23716 KB Output is correct
3 Correct 12 ms 23764 KB Output is correct
4 Incorrect 13 ms 23764 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 312 ms 57404 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23764 KB Output is correct
2 Correct 15 ms 23716 KB Output is correct
3 Correct 12 ms 23764 KB Output is correct
4 Incorrect 13 ms 23764 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23764 KB Output is correct
2 Correct 15 ms 23716 KB Output is correct
3 Correct 12 ms 23764 KB Output is correct
4 Incorrect 13 ms 23764 KB Output isn't correct
5 Halted 0 ms 0 KB -