#include <bits/stdc++.h>
using namespace std;
const int MAXN=50007;
//typedef pair<int,int> E;
struct Edge{
int v,w;
};
vector<Edge> G[MAXN];
int N,M,L,cnt;
int f[MAXN];
void dfs(int u,int fa){
multiset<int> s;
vector<Edge>::iterator it;
for(it=G[u].begin();it!=G[u].end();it++){
int v=(*it).v,w=(*it).w;
if(v==fa)continue;
dfs(v,u);
if(f[v]+w>=L) cnt++;
else s.insert(f[v]+w);
}
while(!s.empty()){
multiset<int>::iterator it=s.begin();
s.erase(it);
multiset<int>::iterator it1=s.lower_bound(L-*it);
if(it1==s.end())
f[u]=max(f[u],*it);
else{
cnt++;
s.erase(it1);
}
}
}
bool check(){
memset(f,0,sizeof(f));
cnt=0;
dfs(1,0);
if(cnt>=M)return 1;
return 0;
}
int main(){
int l=0,r=0;
scanf("%d%d",&N,&M);
for(int i=1;i<N;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
G[u].push_back((Edge){v,w});
G[v].push_back((Edge){u,w});
r+=w;l=min(l,w);
}
int ans=0;
while(l<=r){
int mid=(l+r)>>1;
L=mid;
if(check()){
ans=mid;
l=mid+1;
}
else r=mid-1;
}
printf("%d",ans);
return 0;
}
题目是P5021 原来跟着JSOI的夏令营视频打的 结果用vscode调试一直出不了样例 改到和讲解中代码完全一样也不行 结果直接运行exe反而可以出正解 希望可以解答一下为什么会这样
