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 ...
随机推荐
- codeforces round #427 div2
A:读懂题,乘一下判断大小就行了 #include<bits/stdc++.h> using namespace std; int main() { int s, v1, v2, t1, ...
- PCB SQL Server 触发器应用实例
这里以实际例子对触发器的应用对触发器的理解与应用来得更实际 一.更新触发器(Update) 临时表:inserted表有数据(新数据) Deleted表有数据(旧数据) 实例说明:当表更新时, ...
- E20170928-hm
deploy vt. (尤指军事行动) 使展开; 施展; 有效地利用;部署 bate vt. 减轻; 压制; 减去; 使软化; vi. <方> 减少; 减弱 ...
- js产生随机数教程
<script> function GetRandomNum(Min,Max){ var Range = Max - Min; var Rand = Math.random() ...
- [Swift通天遁地]三、手势与图表-(6)创建包含三条折线的线性图表
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Ubuntu中安装部署Intel CS WebRTC
1环境要求 组件 版本要求 OS CentOS* 7.4, Ubuntu 14.04/16.04 LTS Node 8.11.* (推荐8.11.1) MongoDB 2.4.9 Boost 1.65 ...
- find_in_set的用法(某个字段包含某个字符)
有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4的格式存 ...
- Salvation -- ---广搜 + 限定方向 ,
这个欣求 , 在迷宫里密室了方向 , 走过了一个地方 不做标记 还一个劲 , 找不到媳妇不亏 . 这个题 我跳了两个坑 , 1 : 习惯性添加标记走过的 位置 ,导致所有的位置都能 走过一遍 , ...
- JavaScript--控制类名(className 属性)
className 属性设置或返回元素的class 属性. 语法: object.className = classname 作用: 1.获取元素的class 属性 2. 为网页内的某个元素指定一个c ...
- python常见的加密方式
1.前言 我们所说的加密方式都是对二进制编码的格式进行加密,对应到python中,则是我妈们的bytes. 所以当我们在Python中进行加密操作的时候,要确保我们的操作是bytes,否则就会报错. ...