제출 #1143388

#제출 시각아이디문제언어결과실행 시간메모리
1143388hhvbTriumphal arch (POI13_luk)C++20
0 / 100
418 ms23116 KiB
#include <bits/stdc++.h> using namespace std; queue<int> q; vector< pair<int, int> > m; int need[300001], h[300001]; bool used[300001]; vector<int> adj[300001]; int main() { int n, u, v, adancime, k; int i; cin >> n; for ( i= 0; i < n - 1; i ++ ) { cin >> u >> v; adj[u].push_back( v ); adj[v].push_back( u ); } q.push( 1 ); used[1] = true; m.push_back( {0, 1} ); adancime = 0; h[1] = 0; while ( !q.empty() ) { u = q.front(); for ( i = 0; i < adj[u].size(); i ++ ) { if ( used[ adj[u][i] ] == false ) { q.push( adj[u][i] ); v = h[u] + 1; h [ adj[u][i] ] = v; m.push_back( make_pair( v, adj[u][i] ) ); used[adj[u][i]] = true; if ( v > adancime ) adancime = v; } } q.pop(); } sort ( m.begin(), m.end() ); int l, r, j; l = 0; r = 300000; while ( l + 1 < r ) { k = (l + r) / 2; for ( i = n - 1; i >= 0; i -- ){ u = m[i].second; if ( m[i].first == adancime ) { need[u] = 0; } else { for ( j = 0; j < adj[u].size(); j ++ ) { if ( h[ adj[u][j] ] > h[u] ) need[u] = need[u] + need[ adj[u][j] ] + 1; } need[u] -= k; if ( need[u] < 0 ) need[u] = 0; } } if ( need[1] > 0 ) { l = k; } else { r = k; } } cout << l << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...