正解:点分治

解题报告:

传送门$QwQ$

昂先不考虑关于那个长度的限制考虑怎么做?

就开个桶,记录所有边的取值,每次加入边的时候查下是否可行就成$QwQ$

然后现在考虑加入这个长度的限制?就考虑把这个桶,本来是个$bool$数组记录可行嘛,现在就改成$int$数组记录最小长度

然后就做完辣,,,?$QwQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define int long long
#define gc getchar()
#define t(i) edge[i].to
#define w(i) edge[i].wei
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];i;i=edge[i].nxt) const int N=+,M=+,inf=1e9;
int n,K,head[N],ed_cnt,mxsz[N],sum,sz[N],rt,as,cnt,dis1[N],dis2[N],stp[M];
bool vis[N];
struct ed{int to,nxt,wei;}edge[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ri x,ri y,ri z){edge[++ed_cnt]=(ed){x,head[y],z};head[y]=ed_cnt;}
void dfs(ri x,ri fa)
{
sz[x]=;mxsz[x]=;
e(i,x)if(t(i)^fa && !vis[t(i)])dfs(t(i),x),sz[x]+=sz[t(i)],mxsz[x]=max(mxsz[x],sz[t(i)]);
mxsz[x]=max(mxsz[x],sum-sz[x]);if(mxsz[x]<mxsz[rt])rt=x;
}
void dfs2(ri x,ri fa,ri d1,ri d2)
{if(d1>K)return;dis1[++cnt]=d1,dis2[cnt]=d2;e(i,x)if(!vis[t(i)] && t(i)^fa)dfs2(t(i),x,d1+w(i),d2+);}
il void cal(ri x)
{
stp[]=;cnt=;
e(i,x)
{
if(!vis[t(i)])
{
ri tmp=cnt;dfs2(t(i),x,w(i),);
rp(j,tmp+,cnt){as=min(as,dis2[j]+stp[K-dis1[j]]);/*printf("x=%d to=%d dis1j=%d dis2j=%d stp=%d len=%d\n",x,t(i),dis1[j],dis2[j],stp[K-dis1[j]],K-dis1[j]);*/}
rp(j,tmp+,cnt)stp[dis1[j]]=min(stp[dis1[j]],dis2[j]);
}
}
//printf(" x=%d as=%d\n",x,as);
rp(i,,cnt)stp[dis1[i]]=stp[K+];
}
void solv(ri x){/*printf("rt=%d\n",x);*/vis[x]=;cal(x);e(i,x)if(!vis[t(i)])sum=sz[x],rt=,dfs(t(i),x),solv(rt);} signed main()
{
//freopen("4149.in","r",stdin);freopen("4149.out","w",stdout);
n=read();K=read();rp(i,,n-){ri x=read()+,y=read()+,z=read();ad(x,y,z);ad(y,x,z);}
mxsz[rt]=sum=n;dfs(,);memset(stp,,sizeof(stp));as=stp[];solv(rt);printf("%lld\n",as==stp[K+]?-:as);
return ;
}

最新文章

  1. iOS 真机测试时报错:Provisioning profile &quot;iOS Team Provisioning Profile: XXX” doesn&#39;t include the currently selected device “XXX”.
  2. 在ios8中做的屏幕旋转功能
  3. 分层开发MySchool总结
  4. BZOJ2482: [Spoj1557] Can you answer these queries II
  5. makefile--#的不正确使用
  6. Devexpress之DateEdit学习,可选择日期时 zt
  7. c# const与readonly 关键字的比较
  8. python爬虫学习(1)__抓取煎蛋图片
  9. Android5.1系统WebView内存泄漏场景
  10. adb环境配置+常用adb命令+Logcat命令的用法+手动进行文件比对的方法+批量挪bug
  11. ab测试工具
  12. python测试webservice接口
  13. day25-面向对象结构与成员
  14. 一键查看IE密码!IE PassView简易教程
  15. 部分机器进入bios 的 方法
  16. KrakenD: API Gateway and Manager
  17. JavaScript 问题解决 -- parseInt(&quot;08&quot;)或parseInt(&quot;09&quot;)转换返回0的解决方法
  18. [转]Excel.dll 导出Excel控制
  19. http mimetype为multipart/x-mixed-replace报文
  20. 大数据时代快速SQL引擎-Impala

热门文章

  1. Quick BI 3.0 - 强大的多维分析表格:交叉表
  2. HZOJ 那一天她离我而去
  3. 从 Apache ORC 到 Apache Calcite | 2019大数据技术公开课第一季《技术人生专访》
  4. Pytorch实现MNIST(附SGD、Adam、AdaBound不同优化器下的训练比较) adabound实现
  5. ELMo解读(论文 + PyTorch源码)
  6. clear简单的例子
  7. data-属性的作用
  8. Pytorch Bi-LSTM + CRF 代码详解
  9. 手风琴jq实现
  10. [转载] iptables 防火墙设置