Submission #1300958

#TimeUsernameProblemLanguageResultExecution timeMemory
1300958Muhammad_AneeqParkovi (COCI22_parkovi)C++20
110 / 110
676 ms45812 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int const N=2e5+10,LG=19; vector<pair<int,int>>nei[N]={}; bool ava[N]={}; int h[N]={}; int rch[N]={}; void dfs(int u,int p=0) { for (auto [i,w]:nei[u]) { if (i==p) continue; h[i]=h[u]+1; dfs(i,u); } } int mx; vector<int>g; int bu(int u,int p=0,int w=0) { int n=1e18,x=0; for (auto [i,w1]:nei[u]) { if (i==p) continue; int vl=bu(i,u,w1); if (ava[i]) n=min(n,vl); else x=max(x,vl); } if (n+x<=mx) { ava[u]=1; return n+w; } if (x+w>mx||p==0)//if it exceeds or is the end { ava[u]=1; g.push_back(u); return w; } ava[u]=0; return x+w; } int n,k; bool check(int mid) { g={}; mx=mid; bu(1); return (g.size()<=k); } inline void solve() { cin>>n>>k; for (int i=1;i<n;i++) { int u,v,w; cin>>u>>v>>w; nei[u].push_back({v,w}); nei[v].push_back({u,w}); } dfs(1); int st=-1,en=1e15+10; while (st+1<en) { int mid=(st+en)/2; if (check(mid)) en=mid; else st=mid; } check(en); set<int>f; for (auto i:g) f.insert(i); for (int i=1;i<=n;i++) { if (f.size()<k) f.insert(i); } cout<<en<<endl; for (auto i:f) cout<<i<<' '; cout<<endl; } signed main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...