题目背景

下发压缩包链接: 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位整数范围内

输入输出样例

输入样例#1:

6 3
1 1 2 3 3
1 2 3
输出样例#1:

15
输入样例#2:

6 10
1 1 2 3 3
1 4 6 5 2 3 3 3 3 3
输出样例#2:

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模拟赛 赤の夜的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. 【POJ 1845】 Sumdiv

    [题目链接] 点击打开链接 [算法] 不妨先将A分解质因数 A = p1^q1p2^p2p3^p3..pn^qn 那么,A^B = p1^q1Bp2^q2B...pn^qnB 根据约数和定理,A^B的 ...

  2. openStack aio nova service-list neutron ext-list

  3. PCB 自动发送邮件---加入表格实现方法

    先看一下手动发送邮件内容加入表格操作(下图所示),直接复制Excel内容,再粘贴到邮件内容中,就是这么便捷,如果我们想自动发送邮件,也实现同样的效果如果实现呢,在这里介绍2种方法: 一.读取Excel ...

  4. java—容器学习笔记

    一:迭代器 刚开始学容器,做了个简单的练习题.. import java.util.ArrayList; import java.util.Collection; import java.util.I ...

  5. [Swift通天遁地]六、智能布局-(7)通过Group(组)命令实现对多个视图的统一约束

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. BZOJ 4867 分块+神tm卡常

    思路: 注意到len<=10 按照权值max-min<=sqrt(n)*len 分块 记一下前缀和  每修改sqrt(n)次以后重新分块   修改的时候整块打标记  两边重构 (这题常数卡 ...

  7. 百度之星2017初赛B1006 小小粉丝度度熊

    思路: 考虑到补签卡一定是连续放置才更优,所以直接根据起始位置枚举.预先处理区间之间的gap的前缀和,在枚举过程中二分即可.复杂度O(nlog(n)). 实现: #include <iostre ...

  8. mysql之数据去重并记录总数

    引用: http://blog.sina.com.cn/s/blog_6c9d65a10101bkgk.htmlhttp://www.jb51.net/article/39302.htm 1.使用di ...

  9. JS高级——逻辑中断

    1.表达式1||表达式2:表达式1为真,返回表达式1:表达式1为假,返回表达式2 2.表达式1&&表达2:表达式1为真,返回表达式2:表达式1为假,返回表达式1

  10. SQl基本操作——视图

    视图适合频繁查询的表:将一个查询结果作为虚拟表提供给开发人员.安全性高,视图只能查询不能修改,它是一张虚拟表.查询方便,逻辑清晰,但是性能低,一般情况下不如自己写sql语句. --创建视图 creat ...