Submission #1061845

# Submission time Handle Problem Language Result Execution time Memory
1061845 2024-08-16T14:14:12 Z Ejen Mousetrap (CEOI17_mousetrap) C++14
25 / 100
529 ms 100176 KB
#include <bits/stdc++.h>
 
#define el '\n'
#define fu(i, a, b) for (long long i = a; i <= b; ++i)
#define fd(i, a, b) for (long long i = a; i >= b; --i)
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define sz(v)  (ll)v.size()
#define mask(i) (1LL << i)
#define bit(x, i) ((x) >> (i) & 1)
 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
 
mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
 
ll Rand(ll l, ll r) {
    return uniform_int_distribution<ll> (l, r) (rng);
}
 
ll last(ll msk)    {return msk & (-msk);}
ll pop_cnt(ll msk) {return __builtin_popcountll(msk);}
ll ctz(ll msk)     {return __builtin_ctzll(msk);}
ll lg(ll msk)      {return 63 - __builtin_clzll(msk);}
 
template<class T1, class T2>
    bool maximize(T1 &a, T2 b) {
        if (a < b) {
            a = b;
            return true;
        }
        return false;
    }
 
template<class T1, class T2>
    bool minimize(T1 &a, T2 b) {
        if (a > b) {
            a = b;
            return true;
        }
        return false;
    }
 
template<class T>
    void print(T &a, string sep = " ", string stop = "\n") {
        for (auto x : a) cout << x << sep;
        cout << stop;
    }
 
template<class T>
    void compress(vector<T> &v) {
        sort(all(v));
        v.resize(unique(all(v)) - v.begin());
    }
 
const long long N = 1e6 + 27, base = 311, inf = 2e18, mod = 1e9 + 19972207;
 
ll n, t, m, timer;
ll a[N], f[N], par[N], del[N];
vector<ll> adj[N];
vector<pair<ll, ll>> save;

void update(ll &a, ll &b, ll c) {
    if (a < c) {
        b = a;
        a = c;
    }
    else maximize(b, c);
}
 
void dfs(ll u) {
    ll fi = 0, se = 0;
    f[u] = sz(adj[u]) - 1;
    if (u != t) del[u] = sz(adj[u]) - 2 + del[par[u]] + (u == m);
    for (ll v : adj[u]) {
        if (v == par[u]) continue;
        par[v] = u;
        dfs(v);
        update(fi, se, f[v]);
    }
    f[u] += se;
}
 
bool check(ll x) {
    ll block = 0;
    for (pair<ll, ll> tmp : save) {
        if (tmp.ss > x) {
            if (block == tmp.ff) return false;
            block++;
        }
    }
    return true;
}

signed main() {
    // freopen("brentford40mu.inp", "r", stdin);
    // freopen("brentford40mu.out", "w", stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> t >> m;
    if (t == m) return cout << 0, 0;
    fu(i, 2, n) {
        ll u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(t);
    ll cnt = 0, pre = 0;
    while (t != m) {
        for (ll v : adj[m]) {
            if (v != par[m] && v != pre) save.push_back(make_pair(cnt + 1, f[v] + del[m]));
        }
        cnt++;
        pre = m;
        m = par[m];
    }
    // fu(i, 1, n) cout << del[i] << ' ';
    sort(all(save));
    // cout << el;
    // for (pair<ll, ll> tmp : save) cout << tmp.ff << ' ' << tmp.ss << el;
    ll l = 0, r = 2 * n;
    while (l < r) {
        ll mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    cout << l;
}

# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 27228 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 221 ms 100176 KB Output is correct
2 Correct 194 ms 94600 KB Output is correct
3 Correct 529 ms 98368 KB Output is correct
4 Correct 175 ms 66388 KB Output is correct
5 Correct 462 ms 98388 KB Output is correct
6 Correct 522 ms 98624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 27228 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 27228 KB Output isn't correct
2 Halted 0 ms 0 KB -