二次联通门 : luoguP1046

/*
这个题好难..... 由苹果树可知
这应该是个树结构的题
所以很自然的想到了用树链剖分来搞一下
连边 最后查询以1为根节点的子树的权值和... 从前闲的没事写着玩...
*/
#include <cstdio>
#define Max 3300 void read (int &now)
{
now = ;
char word = getchar ();
while (word > '' || word < '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} static int Hight; struct Edge
{
int to;
int next;
}; int Edge_Count;
int edge_list[Max];
Edge edge[Max]; inline void AddEdge (int from, int to)
{
Edge_Count++;
edge[Edge_Count].to = to;
edge[Edge_Count].next = edge_list[from];
edge_list[from] = Edge_Count;
Edge_Count++;
edge[Edge_Count].to = from;
edge[Edge_Count].next = edge_list[to];
edge_list[to] = Edge_Count;
} struct Point
{
int size;
int deep;
int dis;
int father;
int tree_number;
int End;
}; struct Tree
{
int l;
int r;
int dis;
int Mid;
}; Tree tree[Max];
Point point[Max];
int Count; void Dfs_1 (int now, int father)
{
int pos = Count++;
point[now].father = father;
point[now].deep = point[father].deep + ;
for (int i = edge_list[now]; i; i = edge[i].next)
{
if (edge[i].to == father)
continue;
Dfs_1 (edge[i].to, now);
}
point[now].size = Count - pos;
} int tree_dis[Max]; void Dfs_2 (int now, int chain)
{
int pos = ;
point[now].tree_number = ++Count;
tree_dis[Count] = point[now].dis;
for (int i = edge_list[now]; i; i = edge[i].next)
{
if (point[edge[i].to].tree_number)
continue;
if (point[edge[i].to].size > point[pos].size)
pos = edge[i].to;
}
if (pos)
Dfs_2 (pos, chain);
for (int i = edge_list[now]; i; i = edge[i].next)
{
if (point[edge[i].to].tree_number)
continue;
Dfs_2 (edge[i].to, edge[i].to);
}
point[now].End = Count;
} void Tree_Build (int l, int r, int now)
{
tree[now].l = l;
tree[now].r = r;
if (l == r)
{
tree[now].dis = tree_dis[++Count] <= ( + Hight) ? : ;
return ;
}
tree[now].Mid = (l + r) >> ;
Tree_Build (l, tree[now].Mid, now << );
Tree_Build (tree[now].Mid + , r, now << | );
tree[now].dis = tree[now << ].dis + tree[now << | ].dis;
} int Tree_Query (int l, int r, int now)
{
if (tree[now].l == l && tree[now].r == r)
return tree[now].dis;
if (r <= tree[now].Mid)
return Tree_Query (l, r, now << );
else if (l > tree[now].Mid)
return Tree_Query (l, r, now << | );
else
return Tree_Query (l, tree[now].Mid, now << ) + Tree_Query (tree[now].Mid + , r, now << | );
} int main (int argc, char *argv[])
{
for (int i = ; i <= ; i++)
read (point[i].dis);
read (Hight);
for (int i = ; i < ; i++)
AddEdge (i, i + );
Count = ;
Dfs_1 (, );
Count = ;
Dfs_2 (, );
Count = ;
Tree_Build (, , );
printf ("%d", Tree_Query (point[].tree_number, point[].End, ));
return ;
}

luogu P1046 陶陶摘苹果的更多相关文章

  1. 洛谷——P1046 陶陶摘苹果

    https://www.luogu.org/problem/show?pid=1046 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有 ...

  2. Luogu P1478 陶陶摘苹果

    Luogu P1478 陶陶摘苹果(升级版) 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2 ...

  3. 洛谷P1046 陶陶摘苹果

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 101010 个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个 303030 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

  4. P1046 陶陶摘苹果

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  5. P1046 陶陶摘苹果 Python实现

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  6. [模拟]P1046 陶陶摘苹果

    陶陶摘苹果 ## 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试 ...

  7. 题解【洛谷P1046】[NOIP2005普及组] 陶陶摘苹果

    [NOIP2005] 陶陶摘苹果 首先,我们用一个数组s[11]存储每个苹果的高度. 然后,用a表示陶陶的身高. 接着,用a+30与s[i]比较,大于则计数器加一. 最后,输出计数器的值即可. #in ...

  8. 洛谷 P1478 陶陶摘苹果(升级版)【贪心/结构体排序/可用01背包待补】

    [链接]:https://www.luogu.org/problemnew/show/P1478 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他 ...

  9. 武汉科技大学ACM:1007: 陶陶摘苹果

    Problem Description 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹 ...

  10. 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1

    题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...

随机推荐

  1. JAVA的枚举基本操作,对原码反码补码的理解及为运算的深入理解,浮点数计算的误差分析

    ①深入浅出的了解枚举类型 先看一段代码: enum Size{SMALL,MEDIUM,LARGE}; public class EnumTest { public static void main( ...

  2. Spring Boot(二)

    Spring MVC流程图 注册流程图: result代码: import java.io.UnsupportedEncodingException; import java.net.URLEncod ...

  3. node-red File读取好保存

    File节点是操作文件的节点 file文件的保存 拖拽 注入节点inject  file节点(writes msg.payload to a file)和 debug节点到工作区,并连线 设置file ...

  4. .Net MVC 输出HTML内容

    1.后台代码中的带HTML标记的内容 ViewData["msg"]="<b>Title</b>"; 然则如许打印出来的就是 <b ...

  5. LVS简单理解

    LVS LVS(Linux Virtual Server)即Linux虚拟服务器 目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案 终端用户 ...

  6. Lua for - ipairs,pairs,# 遍历的运行时间

  7. 亲密字符串之Javascript解法

    本题为leetcode第859题,原题链接在此:https://leetcode-cn.com/problems/buddy-strings/submissions/ 给定两个由小写字母构成的字符串  ...

  8. Java 之 web 相关概念

    一.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端(目前常用) 二.网络资源 1.静态资源 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器 ...

  9. awvs 中文手册详细版(含10.5及12版本)

    目录: 0×00.什么是Acunetix Web Vulnarability Scanner ( What is AWVS?) 0×01.AWVS安装过程.主要文件介绍.界面简介.主要操作区域简介(I ...

  10. ceph 剔除osd

    先将osd.2移出集群 root@ceph-monster:~# ceph osd out osd.2 marked out osd.2. root@ceph-monster:~# ceph osd ...