【FZU 2277】Change
题意
有一颗有n个节点的有根树,根节点编号时1,每个结点都有一个值ai,开始的时候,所有节点的值都是0.
我们有q个操作,操作只有两种类型
1 v x k,a[v]+=x,a[v']+=x-k,a[v"]+=x-2*k... v'是结点v的孩子 。
2 v 输出a[v]mod 1e9+7。
分析
dfs序+线段树
下面的代码TLE了,一会再改,感觉没啥毛病哇
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
typedef long long LL; const int maxn=+;
const int MOD=;
int n,T,q,num ;
vector<int>child[maxn];
LL a[maxn],r[maxn],dep[maxn],val[maxn];
void dfs(LL u){
num++;
a[num]=u;
for(int i=;i<child[u].size();i++){
int v=child[u][i];
dep[v]=dep[u]+;
dfs(v);
}
r[u]=a[num];
return ;
}
LL addv[*maxn],kv[*maxn];
int ql,qr;
LL v,k; void update(int o,int L,int R){
if(ql<=L&&qr>=R){
addv[o]=(add[o]%MOD+v%MOD)%MOD;
kv[o]=(kv[o]%MOD+k%MOD)MOD;
return;
}
int M=L+(R-L)/;
if(ql<=M)
update(*o,L,M);
if(qr>M)
update(*o+,M+,R);
return;
}
//找到v的值
LL query(int o,int L,int R,LL adv,LL adk){
if(L==R){
return addv[o]+adv-dep[val[L]]*(kv[o]+adk);
}
int M=L+(R-L)/;
if(v<=M)
return query(*o,L,M,(adv%MOD+addv[o]%MOD)%MOD,(adk+kv[o])%MOD);
if(v>M)
return query(*o+,M+,R,(adv%MOD+addv[o]%MOD)%MOD,(adk%MOD+kv[o]%MOD)%MOD);
}
int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%d",&n);
for(int i=;i<=n;i++)child[i].clear();
num=;
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
child[x].push_back(i);
}
dep[]=;
dfs();
for(int i=;i<=n;i++)val[a[i]]=i;
memset(addv,,sizeof(addv));
memset(kv,,sizeof(kv));
scanf("%d",&q);
for(int i=;i<=q;i++){
int ty;
scanf("%d",&ty);
if(ty==){
int vv;
LL x;
scanf("%d%lld%lld",&vv,&x,&k);
ql=a[vv],qr=r[vv],v=x+dep[vv]*k;
// cout<<ql<<" "<<qr<<endl;
update(,,n);
}else{
int vv;
scanf("%d",&vv);
v=a[vv];
cout<<query(,,n,,)%MOD<<endl;
}
} /* for(int i=1;i<=num;i++)
printf("%d ",a[i]);
printf("\n");
for(int i=1;i<=n;i++){
printf("%d %d\n",i,r[i]);
}*/
}
return ;
}
【FZU 2277】Change的更多相关文章
- 【补】【FZU月赛】【20150515】【待续】
A FZU-2054 水题,比较A,B双方的最大值即可. B FZU-2055 string,截取‘.’之前和之后然后和给出的文件夹名和拓展名比较就好了啊,不明白为什么那么多人错. 代码: #incl ...
- 【FZU - 2150】Fire Game(bfs)
--> Fire Game 直接写中文了 Descriptions: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地 ...
- F - Change FZU - 2277 (DFS序+线段树)
题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【静默安装】configToolAllCommands响应文件问题
[静默安装]configToolAllCommands响应文件问题 客户在静默安装RAC 12.1.0.2的时候有如下的输出: Successfully Setup Software. As inst ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
- 【uTenux实验】互斥体
互斥体,维基百科中交互斥锁.其定义是这样的:互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制 ...
- 【计算机视觉领域】常用的 feature 提取方法,feature 提取工具包
[计算机视觉领域]常用的 feature 提取方法,feature 提取工具包 利用 VL 工具包进行各种特征的提取: VL 工具包官网地址:http://www.vlfeat.org/index.h ...
随机推荐
- 基于UDP协议编程
基于udp套接字 udp是无链接的,先启动哪一端都不会报错. UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...
- 关于this指向问题的总结【转自秘密花园】
this 的工作原理 JavaScript 有一套完全不同于其它语言的对 this 的处理机制. 在五种不同的情况下 ,this 指向的各不相同. 第一种:全局范围内 this; 当在全部范围内使用 ...
- hibernate的注解属性mappedBy详解【实际项目】
[应用情节: 技术问答] 一个类是问题类 一个类是回答类 一个类是针对回答的讨论类 关系是一个问题对应多个答案 一个答案对应多个讨论 [三个类的注解关系] 问题类的 答案类的 讨论类的
- Sublimetext3的下载与安装
https://www.sublimetext.com/ Sublimetext价格不菲,但是作者允许无限期的免费试用,请不要下载破解版 使用国内汉化版的很有可能感染病毒,请善待电脑 百度搜索找到官网 ...
- iOS6 自动布局 入门–Auto Layout
目前为止,即使你的界面设计是在合理的复杂度内,你也必须要为之写许多代码来适应变化的布局.现在我相信你会很高兴听到这种情况将不会发生了-对于iPhone与iPad IOS6 带来了一个非常了不起的特征: ...
- win10开始键点击无效果
1.在键盘上按下win+R键,或在开始菜单图标上点击右键选择运行: 2.输入powershell,按下“确定”运行:3.在窗口里输入或复制粘贴以下命令,注意只有一行: Get-AppxPackage ...
- 04:sqlalchemy操作数据库 不错
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- svn服务器端回退版本 (转)
由于误操作,不小心将错误的代码提交到了svn上,于是想在服务器上撤销本次提交,经过尝试,发现进行以下步骤的操作即可彻底删除本次提交: 1.首先找到本次提交后生成的版本号,例如为r224. 2.登录到s ...
- Diffie-Hellman 密钥交换
假定有两个全局公开的参数,分别为一个素数p和一个整数g,g是p的一个原根,为了协商共享的会话密钥: 首先,用户A随机选取a,计算出A = g^a mod p,并将A发送给B:然后,用户B随机选取b,计 ...
- 验证DataGridView单元格的值
private void gridPurchaseOrderDetail_CellValidating(object sender, DataGridViewCellValidatingEventAr ...