noip模拟赛 赤の夜
题目背景
下发压缩包链接: https://pan.baidu.com/s/1geC4ooz 密码: 3vpt(同T1)
正在想这么说的时候——
突然涌出一种强烈的晕眩感。
这是,什么……?
眼花吗?不对……
由佳也失去平衡快摔倒了。
连平常的呼吸都难以保持。
这时——空间更大幅度的扭曲了。

这种感觉,就像失去了身体和空间的境界线,渐渐,渐渐的被扭曲着……
昏过去,也只是时间的……问题……罢了……
————?
感觉到——有什么发生了崩坏?
这是……什么?

这到底是,怎么回事……?
赤夜——
照亮了我们,不,照亮了整条街道。
本应悬挂在西边的天空的夕阳……不见了?
我条件反射地抬头仰望天穹。
啊啊啊啊啊——!!!

目睹了不可能存在的景色,我不禁大声喊叫起来……
在我们头顶上的,那是……
漆黑——漆黑之月
比黄昏更为黑暗,应该被称为“赤夜”的世界,在我们的周围蔓延。
题目描述
数据结构大师ddd给你出了一道题:
给你一棵树,最开始点权为0,每次将与一个点x树上距离<=1的所有点点权+1,之后询问这些点修改后的点权和
输入输出格式
输入输出格式
输入格式:
第一行两个数n和m
之后一行n-1个数,第i个数fa[i + 1]表示i + 1点的父亲编号,保证fa[i + 1]<i + 1
之后一行m个数,每个数x依次表示这次操作的点是x
输出格式:
输出一个数,即这m次询问的答案的和
保证答案在有符号64位整数范围内
输入输出样例
6 3
1 1 2 3 3
1 2 3
15
6 10
1 1 2 3 3
1 4 6 5 2 3 3 3 3 3
115
说明
样例#3,#4,#5,#6见下发的文件
【子任务】
子任务会给出部分测试数据的特点。
如果你在解决题目中遇到了困难, 可以尝试只解决一部分测试数据。
每个测试点的数据规模及特点如下表:
| 测试点编号 | n的范围 | m的范围 | 特殊性质 |
|---|---|---|---|
| 测试点1 | n = 1000 | m = 1000 | 数据随机 |
| 测试点2 | n = 1000 | m = 1000 | 数据随机 |
| 测试点3 | n = 100000 | m = 100000 | |
| 测试点4 | n = 100000 | m = 100000 | |
| 测试点5 | n = 100000 | m = 1000000 | 树是一条链 |
| 测试点6 | n = 100000 | m = 1000000 | |
| 测试点7 | n = 100000 | m = 1000000 | |
| 测试点8 | n = 100000 | m = 3000000 | |
| 测试点9 | n = 100000 | m = 3000000 | |
| 测试点10 | n = 100000 | m = 10000000 |
【由乃暖心的小提示】
由于这个题最大读入量有约45MB,非常巨大,顺便为了教你们怎么写读入优化,在这里附送上一个fread膜版,在下发文件中。(真正NOIP的时候如果你记得住可以用的,或许就是AK和595的差别哦~)
【说明】
【样例1说明】
原树结构:

第一次操作后:

这次操作的答案为1+1+1=3
第二次操作后:

这次操作的答案为2+2+1=5
第三次操作后:

这次操作的答案为3+2+1+1=7
所有操作的答案总和为3+5+7=15,故输出15.
分析:一类修改+查询问题.m高达10000000,显然不能直接操作,而由于它每次操作都是一个点对多个点产生贡献,每次也是查询一些点,我们就可以计算每个点对答案的贡献,不用实际操作,打上标记就好了.
如果当前操作的点是x,那么x的答案就+=x所连的点+1,对x的父亲的贡献是2(x+1,fa[x] + 1),对x的父亲的父亲的贡献是1,对x的儿子的贡献是2,对x的儿子的儿子的贡献是1.枚举每个点的儿子是很费时间的,所以我们只记录父节点和父节点的父节点的贡献,就能推出当前的答案.
维护两个数组:pushup,tag,son,tag表示是操作的次数,pushup是其它点对当前点的贡献和,son是当前点的子节点一共修改了多少次.修改点x:
tag[x]++,pushup[fa[x]] +=2,pushup[fa[fa[x]]]++,son[fa[x]]++,pushup[x] += du[x] + 1.
查询点x:
ans = pushup[x] + tag[fa[x]] * 2 + tag[fa[fa[x]]] + son[fa[x]] - tag[x].
(子节点对x的贡献+父节点的贡献+父节点的父节点的贡献+和x同一深度其它点的贡献).
当操作很费事,并且操作对询问有影响时,可以试试能不能对操作打个标记而不去实际操作来计算对答案的贡献.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, m; int fa[];
long long ans, tag[], pushup[], son[], du[]; long long read()
{
long long res = ;
char ch = ;
while (ch < '' || ch > '')
ch = getchar();
while (ch >= '' && ch <= '')
{
res = res * + ch - '';
ch = getchar();
}
return res;
} int main()
{
n = read();
m = read();
for (int i = ; i <= n; i++)
{
fa[i] = read();
du[i]++;
du[fa[i]]++;
}
while (m--)
{
long long x;
x = read();
pushup[x] += du[x] + ;
pushup[fa[x]] += ;
pushup[fa[fa[x]]]++;
tag[x]++;
son[fa[x]]++;
long long temp = pushup[x];
temp += tag[fa[x]] * ;
temp += tag[fa[fa[x]]];
temp += son[fa[x]] - tag[x];
ans += temp;
}
printf("%lld\n", ans); return ;
}
noip模拟赛 赤の夜的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- P3187 [HNOI2007]最小矩形覆盖
传送门 首先这个矩形的一条边肯定在凸包上.那么可以求出凸包然后枚举边,用类似旋转卡壳的方法求出另外三条边的位置,也就是求出以它为底最上面最右边最左边的点的位置.离它最远的点可以用叉积求,最左最右的可以 ...
- Gym - 101972B Arabella Collegiate Programming Contest (2018) B. Updating the Tree 树DFS
题面 题意:T组数据,每次给你1e5个点的树(1为根),每个点有一权值,询问1-n每个节点的子树中, 至少修改几个点的权值(每次都可以任意修改),才能让子树中任意2点的距离==他们权值差的绝对值 无解 ...
- Vue项目中如何使用less(添加less依赖)
今天在新工程里添加了一段样式代码代码突然报错了: <!-- Add "scoped" attribute to limit CSS to this component onl ...
- HashMap的尾部遍历问题--Tail Traversing
在看网上HashMap的resize()设计时,提到尾部遍历. JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入.这样做的目的是:避免尾部遍 ...
- P1968 美元汇率
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- CSS——float
float:就是在于布局,首先要介绍的是文档流(标准流),之后是浮动布局. 文档流:元素自上而下,自左而右,块元素独占一行,行内元素在一行上显示,碰到父集元素的边框换行. 浮动布局: 1.float: ...
- 基于证书的MS SQL2005数据库镜像搭建
一.准备工作: 3台服务器同版本,硬盘分区大小相同,安装相同版本数据库软件. host中分别标注3台服务器IP和主机名称. 主体服务器上创建数据库,并进行完整备份数据库和数据库事务. 拷贝备份文件给镜 ...
- 解决springmvc返回json中文乱码
在pringmvc中通过设置@ResponseBody返回json乱码问题,这个问题上网找了很久,发现答案真是人云亦云,奉上我的解决方案: 解决方案一:需要导入 jackson-core-asl-1. ...
- (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例
http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...
- -moz、-ms、-webkit
1.-moz代表firefox浏览器私有属性 2.-ms代表IE浏览器私有属性 3.-webkit代表safari.chrome私有属性 需要设置这个的样式: transform,border-rad ...