Submission #1143519

#TimeUsernameProblemLanguageResultExecution timeMemory
1143519hhvb새로운 문제 (POI13_luk)C++20
10 / 100
367 ms23600 KiB
#include <bits/stdc++.h> using namespace std; const int Nmax = 300001; queue<int> q; vector<int> adj[Nmax]; vector< pair<int, int> > v; int adancime[Nmax]; long long dp[Nmax]; bool used[Nmax]; int main() { int n, son, nod, v1, u, i, j, adancim; int l, r, k; cin >> n; for ( i = 0; i < n - 1; i ++ ) { cin >> u >> v1; adj[u].push_back( v1 ); adj[v1].push_back( u ); } q.push( 1 ); used[1] = true; v.push_back( make_pair (0, 1) ); while ( !q.empty() ) { nod = q.front(); for ( i = 0; i < adj[nod].size(); i ++ ) { v1 = adj[nod][i]; if ( used[v1] == false ) { q.push( v1 ); used[v1] = true; adancime[v1] = adancime[nod] + 1; v.push_back( {adancime[v1], v1 } ); } } q.pop(); } sort ( v.begin(), v.end() ); l = -1; r = Nmax - 1; while ( l < r - 1 ) { k = ( l + r ) / 2; for ( i = v.size() - 1; i >= 0; i -- ) { nod = v[i].second; adancim = v[i].first; for ( j = 0; j < adj[nod].size(); j ++ ) if ( adancime[ adj[nod][j] ] > adancim ) dp[nod] = dp[nod] + dp[ adj[nod][j] ] + 1; dp[nod] -= k; if ( dp[nod] < 0 ) dp[nod] = 0; } if ( dp[1] > 0 ) l = k; else r = k; } cout << r << "\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...