Submission #419020

#TimeUsernameProblemLanguageResultExecution timeMemory
419020egekabasMousetrap (CEOI17_mousetrap)C++14
45 / 100
3333 ms90104 KiB
#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){ if(trap[u] == 0) sum += min(1LL, getans(u, v, curval)); else 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 = n; 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'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...