【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了,一会再改,感觉没啥毛病哇
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <vector> 6 using namespace std; 7 typedef long long LL; 8 9 const int maxn=300000+100; 10 const int MOD=1000000007; 11 int n,T,q,num ; 12 vector<int>child[maxn]; 13 LL a[maxn],r[maxn],dep[maxn],val[maxn]; 14 void dfs(LL u){ 15 num++; 16 a[num]=u; 17 for(int i=0;i<child[u].size();i++){ 18 int v=child[u][i]; 19 dep[v]=dep[u]+1; 20 dfs(v); 21 } 22 r[u]=a[num]; 23 return ; 24 } 25 LL addv[4*maxn],kv[4*maxn]; 26 int ql,qr; 27 LL v,k; 28 29 void update(int o,int L,int R){ 30 if(ql<=L&&qr>=R){ 31 addv[o]=(add[o]%MOD+v%MOD)%MOD; 32 kv[o]=(kv[o]%MOD+k%MOD)MOD; 33 return; 34 } 35 int M=L+(R-L)/2; 36 if(ql<=M) 37 update(2*o,L,M); 38 if(qr>M) 39 update(2*o+1,M+1,R); 40 return; 41 } 42 //找到v的值 43 LL query(int o,int L,int R,LL adv,LL adk){ 44 if(L==R){ 45 return addv[o]+adv-dep[val[L]]*(kv[o]+adk); 46 } 47 int M=L+(R-L)/2; 48 if(v<=M) 49 return query(2*o,L,M,(adv%MOD+addv[o]%MOD)%MOD,(adk+kv[o])%MOD); 50 if(v>M) 51 return query(2*o+1,M+1,R,(adv%MOD+addv[o]%MOD)%MOD,(adk%MOD+kv[o]%MOD)%MOD); 52 } 53 int main(){ 54 scanf("%d",&T); 55 for(int t=1;t<=T;t++){ 56 scanf("%d",&n); 57 for(int i=1;i<=n;i++)child[i].clear(); 58 num=0; 59 for(int i=2;i<=n;i++){ 60 int x; 61 scanf("%d",&x); 62 child[x].push_back(i); 63 } 64 dep[1]=1; 65 dfs(1); 66 for(int i=1;i<=n;i++)val[a[i]]=i; 67 memset(addv,0,sizeof(addv)); 68 memset(kv,0,sizeof(kv)); 69 scanf("%d",&q); 70 for(int i=1;i<=q;i++){ 71 int ty; 72 scanf("%d",&ty); 73 if(ty==1){ 74 int vv; 75 LL x; 76 scanf("%d%lld%lld",&vv,&x,&k); 77 ql=a[vv],qr=r[vv],v=x+dep[vv]*k; 78 // cout<<ql<<" "<<qr<<endl; 79 update(1,1,n); 80 }else{ 81 int vv; 82 scanf("%d",&vv); 83 v=a[vv]; 84 cout<<query(1,1,n,0,0)%MOD<<endl; 85 } 86 } 87 88 /* for(int i=1;i<=num;i++) 89 printf("%d ",a[i]); 90 printf("\n"); 91 for(int i=1;i<=n;i++){ 92 printf("%d %d\n",i,r[i]); 93 }*/ 94 } 95 return 0; 96 }
View Code
转载于:https://www.cnblogs.com/LQLlulu/p/8955429.html
【FZU 2277】Change相关推荐
- 【 FZU - 2214 】Knapsack problem(逆向0-1背包)
题干: Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the ...
- 【FZU - 2039】Pets(二分图匹配,水题)
题干: 有n个人,m条狗,然后会给出有一些人不喜欢一些狗就不会购买,问最多能卖多少狗.. Input There is a single integer T in the first line of ...
- 【FZU - 2202】犯罪嫌疑人(思维,假装建图,分类讨论)
题干: 福尔摩斯是个大侦探,他总是在解决疑难案件.这一次的案件也不例外,案件是这样的:有编号为1到N的N位嫌疑犯,他们其中有一个犯了罪,然后每个嫌疑犯都被询问,"哪一个人犯了罪?" ...
- 【FZU - 2254】英语考试(最小生成树,思维,建图)
题干: 在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习. 这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m. YellowSatr准备采用联想记忆法 ...
- 【FZU - 1759】Super A^B mod C (数论,快速幂,快速乘,欧拉降幂,指数循环节,模板)
题干: Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1&l ...
- 【FZU - 2140 】Forever 0.5 (计算几何,构造)
题干: Given an integer N, your task is to judge whether there exist N points in the plane such that sa ...
- 【nyoj - 860】 又见0-1背包 (dp,反向0-1背包,好题好思路)
题干: 又见01背包 时间限制:1000 ms | 内存限制:65535 KB 难度:3 输入 多组测试数据. 每组测试数据第一行输入,n 和 W ,接下来有n行,每行输入两个数,代表第i个物品的 ...
- 【整理归纳】Linux中文件的Access,Modify,Change区别
[整理归纳]Linux中文件的Access,Modify,Change区别 Access\Modify\Change的初始时间记录都是文件被创建的时间 Access 指最后一次读取的时间(访问) Mo ...
- 【论文笔记】Crop phenotyping in a context of Global Change: what to measure and how to do it
[论文笔记]Crop phenotyping in a context of Global Change: what to measure and how to do it 全球变化背景下的作物表型: ...
- 【FZU】Problem 2181 快来买肉松饼 点双连通
传送门:[FZU]Problem 2181 快来买肉松饼 题目分析:无向图找奇圈的问题.首先我们做tarjan求出点双连通块,每一个块中用黑白染色法得到最长的奇圈,然后这个奇圈中不参加游戏的小孩就是这 ...
最新文章
- Linux下php5.3编译oracle客户端
- 日常运维管理技巧十五(htop使用说明top增强版)(转载)
- SAP Analytics Cloud里的Planning model
- 摄像头自动曝光相关基础知识
- 大脑比机器智能_机器大脑的第一步
- js中的时间与毫秒数互相转换,倒计时
- springboot搞定全局自定义异常
- flutter 发布release版的流程(android)
- Redis脚本插件之————执行Lua脚本示例
- 僵尸粉检测 php,微信新功能,一键检测你的手机卡不卡,还能查僵尸粉
- JavaScript判断数组中是否包含某个值?
- 超高精度UWB其实并不贵——UWB定位基站成本详解
- MySQL数据库的完美卸载
- [unity2D] 迷你拼图
- 简单学JAVA-Java学习方法-费曼学习法
- 1、关于douyin 小红书等平台 人均985 211的想法
- PHP+JS+HTML 手机下拉加载分页
- L1-040 最佳情侣身高差
- ctfshow 做题 萌新 模块(3)
- 经验总结 黑客入侵网络的50种方法2