Submission #784606

#TimeUsernameProblemLanguageResultExecution timeMemory
784606cadmiumskyMousetrap (CEOI17_mousetrap)C++17
0 / 100
32 ms15256 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; using ld = long double; //#define int ll #define sz(x) ((int)(x).size()) using pii = pair<int,int>; using tii = tuple<int,int,int>; const int nmax = 1e5 + 5; int dp[nmax], p[nmax]; vector<int> g[nmax]; vector<vector<int>> adj; void initp(int node, int f) { p[node] = f; for(auto x : g[node]) if(x != f) initp(x, node); } void initdp(int node, int f) { //cerr << node << '\n'; vector<int> vs; for(auto x : g[node]) { if(x == f) continue; initdp(x, node); vs.emplace_back(dp[x]); } sort(all(vs)); if(sz(vs) < 2) dp[node] = 1; else dp[node] = sz(vs) + rbegin(vs)[1]; return; } bool crapa(int threshold) { int tolerance = 0; for(int i = 0; i < sz(adj); tolerance++, i++) { for(auto x : adj[i]) if(x > threshold) threshold--, tolerance--; else break; if(tolerance < 0 || threshold < 0) return 1; } return 0; } signed main() { cin.tie(0) -> sync_with_stdio(0); int n, T, M; cin >> n >> T >> M; for(int i = 1, x, y; i < n; i++) { cin >> x >> y; g[x].emplace_back(y); g[y].emplace_back(x); } initp(T, T); int prv = -1; while(M != T) { adj.emplace_back(); for(auto x : g[M]) { if(x == p[M] || x == prv) continue; initdp(x, M); adj.back().emplace_back(dp[x]); } prv = M; //cerr << M << '\n'; M = p[M]; sort(all(adj.back()), greater<int>()); //for(auto x : adj.back()) //cerr << x << ' '; //cerr << '\n'; } int sum = -1; for(int i = 0; i < sz(adj); i++) { sum += sz(rbegin(adj)[i]); for(auto &x : rbegin(adj)[i]) x += sum; } //for(auto v : adj) { //for(auto x : v) //cerr << x << ' '; //cerr << '\n'; //} //cerr << " > " << crapa(3) << '\n'; int lim = -1; for(int step = 18; step >= 0; step--) if(crapa(lim + (1 << step))) lim += (1 << step); cout << lim + 1 << '\n';; } /** Anul asta se da centroid. -- Surse oficiale */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...