제출 #1300899

#제출 시각아이디문제언어결과실행 시간메모리
1300899Jawad_Akbar_JJParkovi (COCI22_parkovi)C++20
110 / 110
558 ms43952 KiB
#include <iostream> #include <vector> using namespace std; #define int long long const int N = 1<<18, inf = 1e15; vector<pair<int, int>> nei[N]; vector<int> vec, Ans; int Mx[N], Mn[N], seen[N], type[N], Len; void dfs(int u, int p, int eW){ int mn = inf, mx = 0; for (auto [i, w] : nei[u]){ if (i == p) continue; dfs(i, u, w); if (type[i] == 1) mn = min(mn, Mn[i] + w); else mx = max(mx, Mx[i] + w); } if (mx + mn <= Len) type[u] = 1, Mn[u] = mn; else if (mx + eW > Len or u == 1) type[u] = 1, Mn[u] = 0, vec.push_back(u); else type[u] = 2, Mx[u] = mx; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin>>n>>k; for (int i=1;i<n;i++){ int a, b, c; cin>>a>>b>>c; nei[a].push_back({b, c}); nei[b].push_back({a, c}); } int l = 0, r = inf; while (l + 1 < r){ Len = (l + r) / 2, vec.clear(); dfs(1, 1, 0); if (vec.size() <= k) r = Len, Ans = vec; else l = Len; } cout<<r<<'\n'; for (int i : Ans) cout<<i<<' ', seen[i] = 1, k--; for (int i=1;i<=n;i++){ if (k > 0 and seen[i] == 0) cout<<i<<' ', k--; } 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...