Submission #671162

#TimeUsernameProblemLanguageResultExecution timeMemory
671162nekiParkovi (COCI22_parkovi)C++14
110 / 110
1369 ms45136 KiB
#include <bits/stdc++.h> #define ll long long #define vc vector using namespace std; int main() { ll n, k; cin >> n >> k; vc<vc<pair<ll, ll>>> edg(n+1); ll sum=0; for(ll i=1;i<n;++i){ ll a, b, w;cin >> a >> b >> w; sum+=w; edg[a].emplace_back(b, w); edg[b].emplace_back(a, w); } ll l=0, r=sum, cnt=0; vc<ll> ans(n+1, 0); function<ll (ll)> solve=[&](ll d){ ans.assign(n+1, 0); cnt=0; function<pair<ll, ll> (ll, ll, ll)> dfs=[&](ll u, ll p, ll w){ ll bm=0, m, M=0; for(auto v: edg[u])if(v.first!=p){ auto q=dfs(v.first, u, v.second); if(q.first){ if(bm) m=min(m, q.second); else bm=1, m=q.second; } else M=max(M, q.second); } if(p==-1){ if(bm && m+M<=d) return make_pair(0LL, 0LL); ++cnt; ans[u]=1; return make_pair(1LL, 0LL); } if(bm){ if(m+M<=d) return make_pair(1LL, m+w); if(M+w<=d) return make_pair(0LL, M+w); ++cnt;ans[u]=1; //dodamo park v u return make_pair(1LL, w); } else{ if(M+w<=d) return make_pair(0LL, M+w); ++cnt;ans[u]=1; //dodamo park v u return make_pair(1LL, w); } }; dfs(1, -1, 0); return cnt<=k; }; if(n==1){ cout << 0 << endl; cout << 1 << endl; return 0; } /*for(ll i=0;i<sum;++i){ cout << i<<": " <<solve(i)<<endl; }*/ while(l<r){ ll mid=(l+r)/2; if(solve(mid)) r=mid; else l=mid+1; } cout << l << endl;solve(l); for(ll i=1;i<=n;++i) if(cnt<k && ans[i]==0) ans[i]=1, ++cnt; for(ll i=1;i<=n;++i) if(ans[i]) cout << i << " ";cout << endl; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:70:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   70 |     for(ll i=1;i<=n;++i) if(ans[i]) cout << i << " ";cout << endl;
      |     ^~~
Main.cpp:70:54: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   70 |     for(ll i=1;i<=n;++i) if(ans[i]) cout << i << " ";cout << endl;
      |                                                      ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...