BZOJ 2599

http://www.lydsy.com/JudgeOnline/problem.php?id=2599

就是开一个数组t,t[i]表示权值为i的路径最少边数

点分治,找到树的重心分成若干子树后,

得出一棵子树的所有点到根的路径长度x,到根有a条边,用t[k-x]+a更新答案,

全部查询完后,然后再用所有a更新t[x]

把一棵树的所有子树搞完后再遍历所有子树恢复原来t数组

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<map>
#include<algorithm>
#define FOR(i,s,t) for(register int i=s;i<=t;++i)
using namespace std;
const int M=400011,N=200011,MAX=1000011,inf=1e9;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int n,K,cnt,sum,root,ans;
int t[MAX],last[N],son[N],f[N],dis[N],d[N];
bool vis[N];
struct edge{int to,next,v;}e[M];
inline void insert(int u,int v,int w){e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt;e[cnt].v=w;e[++cnt].to=u;e[cnt].next=last[v];last[v]=cnt;e[cnt].v=w;
}
inline void getroot(int x,int fa){son[x]=1;f[x]=0;for(register int i=last[x];i;i=e[i].next)if(e[i].to!=fa&&!vis[e[i].to]){getroot(e[i].to,x);son[x]+=son[e[i].to];f[x]=max(f[x],son[e[i].to]);}f[x]=max(f[x],sum-son[x]);if(f[x]<f[root])root=x;
}
inline void cal(int x,int fa){if(dis[x]>K)return;ans=min(ans,d[x]+t[K-dis[x]]);for(register int i=last[x];i;i=e[i].next)if(e[i].to!=fa&&!vis[e[i].to]){d[e[i].to]=d[x]+1;dis[e[i].to]=dis[x]+e[i].v;cal(e[i].to,x);}
}
inline void add(int x,int fa,bool flag){if(dis[x]>K)return;if(flag)t[dis[x]]=min(t[dis[x]],d[x]);else t[dis[x]]=inf;for(register int i=last[x];i;i=e[i].next)if(e[i].to!=fa&&!vis[e[i].to])add(e[i].to,x,flag);
}
inline void work(int x){vis[x]=1;t[0]=0;for(register int i=last[x];i;i=e[i].next)if(!vis[e[i].to]){d[e[i].to]=1;dis[e[i].to]=e[i].v;cal(e[i].to,0);add(e[i].to,0,1);}for(register int i=last[x];i;i=e[i].next)if(!vis[e[i].to])add(e[i].to,0,0);for(register int i=last[x];i;i=e[i].next)if(!vis[e[i].to]){root=0;sum=son[e[i].to];getroot(e[i].to,0);work(root);}
}
int u,v,w;
int main(){n=read();K=read();FOR(i,1,K)t[i]=n;FOR(i,2,n){u=read(),v=read(),w=read();++u;++v;insert(u,v,w);}ans=sum=f[0]=n;getroot(1,0);work(root);ans!=n?printf("%d\n",ans):puts("-1");return 0;
}

  

转载于:https://www.cnblogs.com/Stump/p/7979105.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android用户界面-菜单

创建菜单 Creating Menus Android提供了三种基础菜单类型&#xff1a; 选项菜单Options Menu 这是一个活动的主菜单。通过按下设备菜单键来显示它。选项菜单包含两组菜单项&#xff1a; 图标菜单Icon Menu 这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多…

QT打开文件

https://www.cnblogs.com/ZY-Dream/p/10571490.html

12.5

持续关注一下足球经理游戏 转载于:https://www.cnblogs.com/dandansang/p/7980132.html

流浪宠物救助网站前端页面_全国爱心人士齐聚鞍山 救助流浪猫狗

入冬之后&#xff0c;流浪猫狗的“吃饭问题”成了众多爱心人士的牵挂。12日上午&#xff0c;来自全国各地的20余位爱心人士&#xff0c;来到宁远镇张忠堡村一流浪猫狗救助站&#xff0c;将价值7000余元的宠物用品捐赠给救助站。当日早上8时许&#xff0c;爱心人士们特意到铁西八…

问题解决

问题解决了&#xff0c;把 #include <string.h> 改写成 #include <string> 就行了 #include <iostream> #include <string> #include "tinystr.h" #include "tinyxml.h" #include <vector> #include "Text.h" #in…

QT 线程之间通信

1.先说QT线程。都知道QT线程有两种使用方式&#xff0c;一种是继承QThread重写run()&#xff0c;一种是继承QObject然后再MovetoThread()到线程下。我也是刚学QT&#xff0c;之前一直做MFC。现在有个问题&#xff0c;我想要创建的是单次运行的线程&#xff0c;就是处理完后就自…

微信小程序 开发过程中遇到的坑(一)

21241.我们使用app.json文件来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 的时候在pages中写注释的时候回报错。 例如&#xff1a; {"pages":[//这是首页面"pages/welcome/welcome"] } 此时就会报错…

java 创建日程到期提醒_日程管理工具—Things 3

Mac上最好用的日程管理工具是哪个&#xff1f;Things 3 for Mac是首选&#xff0c;Things3 Mac全新的设计&#xff0c;外观简洁、大气&#xff0c;功能也是非常强大的&#xff0c;让你用一种优雅而直观的方式来管理个人事务&#xff0c;无论在生活还是工作中&#xff0c;都能取…

数据库优化小结

WHERE条件的优化&#xff1a;1、IN&#xff1a;至少多一个转换的过程&#xff08;先试图转成多个表的连接&#xff0c;如果转换不成功先执行IN里面的子查询&#xff0c;再查询外层记录&#xff09;2、NOTIN&#xff1a;不能应用表索引&#xff0c;可用NOT EXISTS替换的3、<&…

使用VS制作MFC、libmysql.dll出现计算机缺少msvcr120.dll和msvcp120.dll问题

自己应客户要求做了一个数据库的查询工具&#xff0c;结果在客户电脑那边运行出现了计算机缺少msvcr120.dll和msvcp120.dll问题&#xff0c;一开始以为是MFC程序自身有动态链接&#xff0c;结果才发现是libmysql.dll本身依赖于msvcr120.dll和msvcp120.dll&#xff0c;这两个库对…

python 流程控制if判断

简单看下if判断在python的基本用法 # gyf28 定义变量gyf # if gyf > 20: 判断 gyf 是不是〉20# print(你真年轻) 简单实现了 if判断的用法 下面我们再来做一个例子 if判断 gyf是不是〉18 并且〈 22 如果是 则执行打印的任务 输出 表白 如果条件不成立输入打印 阿姨…

python同步oracle_Python cx_Oracle 7引入苏打文档存储

在线QQ客服&#xff1a;1922638专业的SQL Server、MySQL数据库同步软件cx _甲骨文7 .0是非常受欢迎的蟒蛇甲骨文数据库接口,现在是PyPI上的产品。cx _甲骨文是一个开源包,它涵盖了大蟒数据库应用编程接口规范,并添加了许多支持神谕高级功能的内容。安东尼 图宁加刚刚发布了cx _…

总结2010展望2011

总结2010 展望2011转载于:https://www.cnblogs.com/zhouxiuquan/archive/2011/01/28/1947269.html

XP下使用FFMPEG(API和exe)遇到的问题和解决方法。

XP下使用FFMPEG&#xff08;API和exe&#xff09;遇到的问题和解决方法。1、需求背景2、遇到的问题3、解决方法下载链接1、需求背景 因为最近接到项目上的一个需求&#xff0c;就是在MP4&#xff08;H264编码&#xff09;文件里叠加指定字符&#xff0c;于是就想到了使用FFMPE…

钢材规格解读的软件_万维软件ERP五金建材行业解决方案

一、五金建材行业的特征&#xff1a;1、企业的规对较小&#xff1a;身为老板却“身兼多职”&#xff0c;采购、销售、发货、出纳啥都做&#xff1b;2、业务非常多样&#xff1a;虽然这类企业规模小&#xff0c;但也涉及到批发、零售、工程(局部工程)、家装等经营型态&#xff0…

MSDE 认证方式

1. 停止 MSSQLSERVER 以及所有其他相关服务&#xff08;如 SQLSERVERAgent 2. 打开注册表编辑器。要打开注册表编辑器&#xff0c;请依次单击开始和运行&#xff0c;然后键入&#xff1a;“regedt32”3. 找到以下两个子项之一&#xff08;取决于 MSDE 是作为默认 MSDE 实例安装…

duilib学习

记录duilib自学过程。 最近年底公司也没啥事情&#xff0c;自己就想着上网看看duilib怎么制作界面&#xff0c;因为之前想学习一直没时间&#xff0c;现在来看看。 其实学习的就好办法就是看demo&#xff0c;关于duilib网上的学习教程并不多&#xff0c;自己跟着demo敲一遍代…

2017.12.1T19_B2_2zuoye

package com.whxiong.work01; import java.util.Scanner; public class Calculator { Scanner input new Scanner(System.in); public void show() { char Calculator; double num 0; double num1 0; System.out.println("请输入第一个整数&#xff1a;"); …

git指令快捷 idea_IDEA+Git+Gitlab使用详细教程

GitLab 安装踩坑502错误码和访问卡顿解决办法Gitlab对内存的要求高&#xff0c;我的服务器Centos 72核心2G内存&#xff0c;频繁报502错误&#xff0c;访问也很卡。原因可能是可用内存太少。# free -m 查看可用内存这里看到free不多了&#xff0c;解决办法有扩内存或者使用虚拟…

记:ubuntu下交叉编译arm的链接库

以第三方库libjpeg为例&#xff0c;编译所需要的三步&#xff1a; 1、配置./configure脚本参数&#xff0c; ./configure --prefix/home/huanghaitao/Winshare/jpeg-9c/libjpeg CCarm-linux-gnueabihf-gcc --hostarm-linux --enable-shared --enable-static–prefix&#xff0…