#include<bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int inf = 1e9;
constexpr ll infl = 1e18;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, k;
cin >> n >> k;
vector<vector<pair<int,int>>> adj(n);
for( int i = 0; i < n-1; i++) {
int a, b, w;
cin >> a >> b >> w;
a--;b--;
adj[a].emplace_back(b, w);
adj[b].emplace_back(a, w);
}
int root = 0;
for (; root < n; root++)
if (adj[root].size() == 1) break;
vector<int> built;
auto check = [&](ll maxd)->bool{
vector<pair<ll,ll>> memo(n, {-1, -1});
built.assign(n, 0);
int parks = 0;
auto dfs = [&](auto& dfs, int i, int p=-1)->pair<ll,ll> {
if (memo[i].first !=-1) return memo[i];
ll close_build = infl;
ll far = -infl;
for (auto [e, w] : adj[i]) {
if (e == p) continue;
auto [c, f] = dfs(dfs, e, i);
if (f + w > maxd) {
parks++;
built[e] = 1;
close_build = min(close_build, (ll)w);
} else close_build = min(close_build, c + w);
}
for (auto [e, w] : adj[i]) {
if (e == p) continue;
if (built[e]) continue;
auto [c, f] = dfs(dfs, e, i);
if (f + w + close_build <= maxd) continue;
far = max(far, f + w);
}
if (close_build > maxd) far = max(far, 0ll);
// cout << "[maxd,i,close_build,far,parks]=" << maxd << ' ' << i << ',' << close_build << ' ' << far << ',' << parks << endl;
return memo[i] = {close_build, far};
};
auto [c, f] = dfs(dfs, root);
if (f >= 0) {
built[root] = 1;
parks++;
}
return parks <= k;
};
ll l = 0, r = 15;
while (l < r-1) {
ll mid = (l+r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
check(r);
cout << r << '\n';
vector<int> parks;
for (int i = 0; i < n; i++)
if (built[i]) parks.push_back(i);
for (int i = 0; i < n; i++)
if ((int)parks.size() < k && !built[i])
parks.push_back(i);
for (int i : parks) cout << i+1 << ' ';
cout << '\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
91 ms |
35148 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
103 ms |
37536 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |