Submission #540625

#TimeUsernameProblemLanguageResultExecution timeMemory
540625AlperenTParkovi (COCI22_parkovi)C++17
110 / 110
1915 ms44056 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; const long long INF = 2e18 + 5; int n, k, a, b, c; long long l, r, m, park[N], nongood[N]; bool ispark[N]; vector<pair<int, long long>> tree[N]; void dfs(int v, int p, int pw, long long x){ if(tree[v].size() == 1) nongood[v] = 0; for(auto e : tree[v]){ if(e.first != p){ dfs(e.first, v, e.second, x); park[v] = min(park[v], park[e.first] + e.second); } } for(auto e : tree[v]){ if(e.first != p){ if(nongood[e.first] + e.second + park[v] > x){ nongood[v] = max(nongood[v], nongood[e.first] + e.second); } } } if(park[v] > x) nongood[v] = max(nongood[v], 0ll); if(nongood[v] + pw > x) ispark[v] = true, park[v] = 0, nongood[v] = -INF; } bool check(long long x){ memset(ispark, 0, sizeof(ispark)), fill(park, park + N, INF), fill(nongood, nongood + N, -INF); dfs(1, 0, 0, x); if(park[1] > x || (nongood[1] + park[1] > x)) ispark[1] = true; return accumulate(ispark + 1, ispark + n + 1, 0) <= k; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin >> n >> k; for(int i = 1; i <= n - 1; i++){ cin >> a >> b >> c; tree[a].push_back({b, c}); tree[b].push_back({a, c}); } l = -1, r = INF; while(r - l > 1){ m = l + (r - l) / 2; if(check(m)) r = m; else l = m; } check(r); vector<int> v; for(int i = 1; i <= n; i++) if(ispark[i]) v.push_back(i); for(int i = 1; i <= n; i++) if(!ispark[i] && v.size() < k) v.push_back(i); cout << r << "\n"; for(auto i : v) cout << i << " "; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:77:59: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   77 |     for(int i = 1; i <= n; i++) if(!ispark[i] && v.size() < k) v.push_back(i);
      |                                                  ~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...