#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <functional>
#include <vector>
#include <limits>
#include <numeric>
#include <queue>
#define LOG(FMT...) fprintf(stderr, FMT)
using namespace std;
typedef long long ll;
struct Edge {
int v, w;
Edge* next;
};
const int N = 50010;
int n, m, tot, mid, tim;
bool vis[N];
int pool[N];
Edge* g[N];
int dfs(int u);
void adde(int u, int v, int w);
int match(int* arr, int k, int pr);
int main() {
scanf("%d%d", &n, &m);
for (int rep = 1; rep < n; ++rep) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
adde(u, v, w);
adde(v, u, w);
}
int l = 1, r = 500000000;
while (l < r) {
mid = (l + r + 1) / 2;
tot = 0;
memset(vis, 0, sizeof(vis));
tim = 0;
dfs(1);
if (tot >= m)
l = mid;
else
r = mid - 1;
}
printf("%d\n", l);
return 0;
}
void adde(int u, int v, int w) {
static Edge pool[N * 2];
static Edge* p = pool;
p->v = v;
p->w = w;
p->next = g[u];
g[u] = p;
++p;
}
int dfs(int u) {
vis[u] = true;
int pl = ++tim, pr = pl;
for (Edge* p = g[u]; p; p = p->next)
if (!vis[p->v]) {
int v = dfs(p->v) + p->w;
if (v < mid)
pool[pr++] = v;
else
++tot;
}
sort(pool + pl, pool + pr);
int mm = match(pool + pl, pr - pl, -1);
tot += mm;
if (mm * 2 == pr - pl)
return 0;
int l = pl, r = pr - 1;
while (l < r) {
int mid = (l + r + 1) / 2;
if (match(pool + pl, pr - pl, mid - pl) == mm)
l = mid;
else
r = mid - 1;
}
return pool[l];
}
int match(int* arr, int k, int pr) {
int l = 0, r = k - 1, ret = 0;
for (; r > l; --r) {
if (r == pr)
continue;
while (l == pr || l < r && arr[l] + arr[r] < mid)
++l;
if (l >= r)
break;
++ret;
++l;
}
return ret;
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 43.26 us | 76 KB | Accepted | Score: 5 | 显示更多 |
Testcase #2 | 49.49 us | 80 KB | Accepted | Score: 5 | 显示更多 |
Testcase #3 | 53.54 us | 80 KB | Accepted | Score: 5 | 显示更多 |
Testcase #4 | 774.98 us | 128 KB | Accepted | Score: 5 | 显示更多 |
Testcase #5 | 55.975 ms | 1 MB + 344 KB | Accepted | Score: 5 | 显示更多 |
Testcase #6 | 45.766 ms | 1 MB + 580 KB | Accepted | Score: 5 | 显示更多 |
Testcase #7 | 60.096 ms | 1 MB + 344 KB | Accepted | Score: 5 | 显示更多 |
Testcase #8 | 103.599 ms | 2 MB + 164 KB | Accepted | Score: 5 | 显示更多 |
Testcase #9 | 604.63 us | 196 KB | Accepted | Score: 5 | 显示更多 |
Testcase #10 | 30.897 ms | 3 MB + 640 KB | Accepted | Score: 5 | 显示更多 |
Testcase #11 | 52.686 ms | 5 MB + 996 KB | Accepted | Score: 5 | 显示更多 |
Testcase #12 | 69.86 us | 80 KB | Accepted | Score: 5 | 显示更多 |
Testcase #13 | 69.43 us | 80 KB | Accepted | Score: 5 | 显示更多 |
Testcase #14 | 158.75 us | 88 KB | Accepted | Score: 5 | 显示更多 |
Testcase #15 | 156.08 us | 92 KB | Accepted | Score: 5 | 显示更多 |
Testcase #16 | 816.48 us | 132 KB | Accepted | Score: 5 | 显示更多 |
Testcase #17 | 899.81 us | 124 KB | Accepted | Score: 5 | 显示更多 |
Testcase #18 | 44.264 ms | 1 MB + 348 KB | Accepted | Score: 5 | 显示更多 |
Testcase #19 | 47.722 ms | 1 MB + 572 KB | Accepted | Score: 5 | 显示更多 |
Testcase #20 | 85.304 ms | 2 MB + 604 KB | Accepted | Score: 5 | 显示更多 |