luogu P1046 陶陶摘苹果
二次联通门 : 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 陶陶摘苹果的更多相关文章
- 洛谷——P1046 陶陶摘苹果
https://www.luogu.org/problem/show?pid=1046 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有 ...
- Luogu P1478 陶陶摘苹果
Luogu P1478 陶陶摘苹果(升级版) 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2 ...
- 洛谷P1046 陶陶摘苹果
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 101010 个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个 303030 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...
- P1046 陶陶摘苹果
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...
- P1046 陶陶摘苹果 Python实现
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...
- [模拟]P1046 陶陶摘苹果
陶陶摘苹果 ## 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试 ...
- 题解【洛谷P1046】[NOIP2005普及组] 陶陶摘苹果
[NOIP2005] 陶陶摘苹果 首先,我们用一个数组s[11]存储每个苹果的高度. 然后,用a表示陶陶的身高. 接着,用a+30与s[i]比较,大于则计数器加一. 最后,输出计数器的值即可. #in ...
- 洛谷 P1478 陶陶摘苹果(升级版)【贪心/结构体排序/可用01背包待补】
[链接]:https://www.luogu.org/problemnew/show/P1478 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他 ...
- 武汉科技大学ACM:1007: 陶陶摘苹果
Problem Description 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹 ...
- 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1
题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...
随机推荐
- [CodeChef-ANUDTQ] Dynamic Trees and Queries
类似维护括号序列,给每个点建两个点,然后所有操作都能轻松支持了.注意sum和lastans是long long. #include<cstdio> #include<algorith ...
- 后台传带引号(")的数据需要注意
后台返回给前端的json字符串 [{"\"Name\":\"<span style=\\\"color: red\\\">&qu ...
- MQ相关
1. 如何保证消息按顺序执行 2. 如何保证消息不重复消费 3. 如何保证消息不丢失 4.RabbitMQ Java Client简单生产者.消费者代码示例
- Ubuntu linux安装完成后隐藏linux磁盘挂载点
方案1 打开注册表 , 找到这个位置: 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explore ...
- web.config 研究
一.将配置映射成类 1.配置中增加 <configSections> <section name="appConfiguration" type="Oi ...
- Vue 使用技巧手记
watch监听 Vue监听属性有很多种写法,也有几个配置选项 使用配置项 new Vue({ watch:{ content:{ handler(old,newVal){ console.log(ol ...
- 仿EXCEL插件,智表ZCELL产品V1.6 版本发布,增加自定义事件功能
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要解决了单元格值变化时事件的支持,并新增了按单元格名操作的相关API,欢迎大家体验使用. 本次版本更 ...
- cscope安装
安装 # apt-get install cscope .vimrc中添加 if has("cscope") set csprg=/usr/bin/cscope set csto= ...
- 【hbase】hbase-2.2.1配置独立的zookeeper的安装与测试
下载hbase-2.2.1-bin.tar.gz并执行安装命令: [hadoop@hadoop01 ~]$ tar -zxvf hbase--bin.tar.gz 查看安装目录: [hadoop@ha ...
- Linux执行rm命令提示Argument list too long解决办法
在Linux上删除文件时,执行命令报错,报错信息如下:node1:/u01/app/oracle/admin/testdb/adump>rm -f *.aud-bash:/bin/rm:Argu ...