Submission #1161203

#TimeUsernameProblemLanguageResultExecution timeMemory
116120312345678Parkovi (COCI22_parkovi)C++17
110 / 110
706 ms41240 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int nx=2e5+5; ll n, k, lst[nx], far[nx], u, v, w, dist[nx], l=0, r=1e18, md, cnt, fil[nx]; vector<pair<ll, ll>> d[nx]; vector<ll> res; void dfs(ll u, ll p, ll lstw) { int c=0; lst[u]=far[u]=-1; for (auto [v, w]:d[u]) { if (v==p) continue; dist[v]=dist[u]+w; dfs(v, u, w); c++; if (far[v]!=-1&&(far[u]==-1||dist[far[v]]>dist[far[u]])) far[u]=far[v]; if (lst[v]!=-1&&(lst[u]==-1||dist[lst[v]]<dist[lst[u]])) lst[u]=lst[v]; } if (c==0) far[u]=u; if (lst[u]!=-1&&far[u]!=-1&&dist[lst[u]]+dist[far[u]]-2*dist[u]<=md) far[u]=-1; if (far[u]==-1&&lst[u]!=-1&&dist[lst[u]]-dist[u]>md) far[u]=u; if (far[u]!=-1&&dist[far[u]]-dist[u]+lstw>md) cnt++, res.push_back(u), far[u]=-1, lst[u]=u; if (u==p&&far[u]!=-1) cnt++, res.push_back(u); } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>k; for (int i=1; i<n; i++) cin>>u>>v>>w, d[u].push_back({v, w}), d[v].push_back({u, w}); while (l<r) { md=(l+r)/2; res.clear(); cnt=0; dfs(1, 1, 0); //cout<<"debug "<<md<<' '<<cnt<<'\n'; if (cnt<=k) r=md; else l=md+1; } res.clear(); md=l; dfs(1, 1 ,0); cout<<md<<'\n'; for (auto x:res) fil[x]=1; for (int i=1; i<=n; i++) if (res.size()<k&&!fil[i]) res.push_back(i); for (auto x:res) cout<<x<<' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...