题目背景

下发压缩包链接: 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. Fy's dota2

    Fy 觉得自己玩 cf,lol 这种高端游戏已经够厉害了,于 是他决定去玩 dota2.结果 fy 的鼠标右键坏了,所以他就等 到 2250 买了把闪烁匕首,用跳刀前进,准备去送泉水.但 是 fy 一 ...

  2. CF 1016 C —— 思路

    题目:http://codeforces.com/contest/1016/problem/C 一定是先蛇形走在回形走,所以预处理.暴力即可: 自己一开始写了一个,总是WA,又看了看TJ写法: 模仿一 ...

  3. vs2010 下使用C#开发activeX控件

    1.创建一个类库 2.项目属性-应用程序-程序集信息-"使程序集COM可见"勾上; 3.项目属性-生成-"为COM互操作注册"勾上.(这个折腾一天,否则注册事件 ...

  4. PCB SQL Server 代码创建DbLink

    代码如下: ) ) ) ) ) SET @serverName = 'DbLinkName' --db链接名 SET @ip = '120.79.36.65' --需连接服务器的IP SET @dbN ...

  5. 关于swoole 和golang 的压力测试结果

    一.环境介绍 linux centos7 php7.1.18 go1.12.1 2核4G内存 二.代码 swoole代码 <?php $http = new swoole_http_server ...

  6. html5: table表格与页面布局整理

    传统表格布局之table标签排版总结:   默认样式: <style> table { max-width: 800px; border-spacing: 2px; border-coll ...

  7. Kafka详解与总结(一)

    1. Kafka概述 1.1. 消息队列 1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推 ...

  8. ios-判断手机上是否安装了某个App

    方法一     1.获取手机中安装的所有App   1.1.runtime中的方法,所以要导入       #include <objc/runtime.h>   1.2.在 AppDel ...

  9. 判断IOS静态库(.a文件)是否支持模拟器和真机运行

    判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...

  10. 【洛谷4933】大师(DP)

    题目: 洛谷4933 分析: (自己瞎yy的DP方程竟然1A了,写篇博客庆祝一下) (以及特斯拉电塔是向Red Alert致敬吗233) 这里只讨论公差不小于\(0\)的情况,小于\(0\)的情况进行 ...