【题目链接】

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

【算法】

点分治

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 200010
#define MAXK 1000010
typedef long long ll;
const ll INF = 2e9; ll i,n,k,u,v,w,tot,root,len,ans;
ll head[MAXN],size[MAXN],weight[MAXN],sum[MAXN],dep[MAXN],num[MAXK];
bool visited[MAXN]; struct Edge
{
ll to,w,nxt;
} e[MAXN<<]; inline void addedge(ll u,ll v,ll w)
{
tot++;
e[tot] = (Edge){v,w,head[u]};
head[u] = tot;
}
inline void getroot(ll u,ll fa,ll total)
{
ll i,v;
size[u] = ;
weight[u] = ;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (fa != v && !visited[v])
{
getroot(v,u,total);
size[u] += size[v];
weight[u] = max(weight[u],size[v]);
}
}
weight[u] = max(weight[u],total - size[u]);
if (weight[u] < weight[root]) root = u;
}
inline void dfs(ll u,ll fa)
{
ll i,v,w;
if (sum[u] <= k) ans = min(ans,dep[u]+num[k-sum[u]]);
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (fa != v && !visited[v])
{
dep[v] = dep[u] + ;
sum[v] = sum[u] + w;
dfs(v,u);
}
}
}
inline void update(ll u,ll fa)
{
ll i,v;
if (sum[u] <= k) num[sum[u]] = min(num[sum[u]],dep[u]);
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (fa != v && !visited[v]) update(v,u);
}
}
inline void clear(ll u,ll fa)
{
ll i,v;
if (sum[u] <= k) num[sum[u]] = INF;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (fa != v && !visited[v])
clear(v,u);
}
}
inline void work(ll u)
{
ll i,v,w;
dep[u] = ;
visited[u] = true;
num[] = ;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (!visited[v])
{
dep[v] = ;
sum[v] = w;
dfs(v,u);
update(v,u);
}
}
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (!visited[v]) clear(v,u);
}
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (!visited[v])
{
root = ;
getroot(v,,size[v]);
work(root);
}
}
} int main()
{ scanf("%lld%lld",&n,&k);
for (i = ; i <= k; i++) num[i] = INF;
for (i = ; i < n; i++)
{
scanf("%lld%lld%lld",&u,&v,&w);
u++; v++;
addedge(u,v,w);
addedge(v,u,w);
}
root = ;
size[] = weight[] = n;
getroot(,,n);
ans = INF;
work(root);
if (ans < n) printf("%lld\n",ans);
else printf("-1\n");
return ; }

【IOI 2011】Race的更多相关文章

  1. 【BZOJ 2599】【IOI 2011】Race 点分治

    裸的点分治,然而我因为循环赋值$s$时把$i <= k$写成$i <= n$了,WA了好长时间 #include<cstdio> #include<cstring> ...

  2. 【BZOJ2395】【Balkan 2011】Timeismoney 最小乘积生成树

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  3. 【枚举】【SDOI 2011】【bzoj 2241】打地鼠

    2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 877 Solved: 557 Description 打地鼠是 ...

  4. 【SDOI 2011】染色

    [题目链接] 点击打开链接 [算法] 树链剖分 [代码] 本题,笔者求最近公共祖先并没有用树链剖分“往上跳”的方式,而是用倍增法.笔者认为这样比较好写,代码可读性 比较高 此外,笔者的线段树并没有用懒 ...

  5. 【IOI 1998】 Picture

    [题目链接] 点击打开链接 [算法] 线段树扫描线求周长并 [代码] #include <algorithm> #include <bitset> #include <c ...

  6. 【JLOI 2011】 不重复的数字

    [题目链接] 点击打开链接 [算法] 本题用map很好写,笔者用的是哈希的写法 [代码] #include<bits/stdc++.h> using namespace std; #def ...

  7. 【IOI 1996】 Network of Schools

    [题目链接] 点击打开链接 [算法] 对于第一问,将这个图缩点,输出出度为零的点的个数 对于第二问,同样将这个图缩点,输出入度为零.出度为零的点的个数的最大值 [代码] #include <al ...

  8. 【USACO 2011】 道路和航线

    [题目链接] 点击打开链接 [算法] SPFA + SLF / LLL 优化 [代码] #include<bits/stdc++.h> using namespace std; #defi ...

  9. 【JSOI 2011】 分特产

    [题目链接] 点击打开链接 [算法] 考虑求每个人可以不分的方案 那么,对于每件物品,我们把它分成n份,每一份对应分给每一个人,有C(a[i]+n-1,m-1)种方案,而总方案数就是每种 物品方案数的 ...

随机推荐

  1. MSDN性能分析相关网站收集

    Visual Studio 性能分析初学者指南 | Microsoft Docshttps://docs.microsoft.com/zh-cn/visualstudio/profiling/begi ...

  2. UI常用网站

    网站大全 国外的花瓣--Pinterest • The world’s catalog of ideas 字体海洋--求字体网提供中文和英文字体库下载.识别与预览服务,找字体的好帮手 原创设计UI-- ...

  3. ffmpeg编码

    1. 注册所有容器格式和CODEC:av_register_all()2. 打开文件:av_open_input_file()3. 从文件中提取流信息:av_find_stream_info()4. ...

  4. cropper+pillow处理上传图片剪裁(一)

    在写新博客的时候,遇到需要用户上传自定义图片的处理,查了一番资料,决定用cropper和pillow来处理需要剪裁的图片上传,大致思路是:前端收集用户上传的图片和用户剪裁的尺寸数据,后台接收图片后按数 ...

  5. (转)50 个 jQuery 小技巧

    1. 如何修改jQuery默认编码(例如默认UTF-8改成改GB2312): $.ajaxSetup({ajaxSettings:{ contentType:"application/x-w ...

  6. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表

    表分析,简单的说,就是收集表和索引的信息,CBO根据这些信息决定SQL最佳的执行路径.通过对表的分析,可以产生一些统计信息,通过这些信息oracle的优化程序可以进行优化. 语法: DBMS_STAT ...

  7. 小米 SOAR 开源SQL优化工具安装

    github :https://github.com/xiaomi/soar 安装说明 :https://github.com/XiaoMi/soar/blob/master/doc/install. ...

  8. SqlServer动态变换库名

    declare @tname varchar(20),@num intset @tname='Players_Log_L10001'declare @sql Nvarchar(1000)=N'sele ...

  9. Ext未定义问题解决

    做的项目用到EXT.NET,调试时候没问题,发布到IIS上出现EXT未定义,把项目的应用程序池改为Classic 模式就可以了.

  10. 根据业务自己设计的.NET工厂模式架构

    最近项目的架构需要做调整优化,根据业务需要写了一个简单的工厂模式架构 项目介绍:整个系统分为三大平台(这里用A,B,C来标示),每个平台又细分为多个APP客户端(每个APP都有appid来区分) 因为 ...