本主题开始看到以为段树或树状数组,但是,对于一个节点的有疑问的所有子节点的加权,这一条件被视为树的根,像 然后1号是肯定在第一层中,然后建立一个单向侧倒查,然后记录下来 其中每个节点 层,终于 两个节点 之间的差 图层知道,上easy加权成交,然后,我们开始建立的数组,一直爆错,后来发现 是范围有问题,这样直接建立是错的,由于不知道详细范围,数字太大了。 所以參考了一下

http://blog.csdn.net/keshuai19940722/article/details/20128965

厉害啊。我想不到。原来能够建立两个树状数组,然后 在深搜找出节点所在层的同一时候 也记录一下 它的时间戳,也就是这个节点第一次被訪问到的作为一个记录和的树状数组下标。以及往下找子节点回溯回来的这个时间错 建立还有一个记录要减去的和的树状数组下标,这样范围就确定了,可是这样无法直接加权,要对 第一次訪问到的 加权 然后对 回溯的 进行相同的值的 负值加权,同一时候加权的时候 直接所有都加上去。不考虑节点与此时父节点相差层数,仅仅考虑与根的,然后 这样是多加了的。这时候 能够把要减去的 给算好,最后一起减去就能够了,要减去的 就直接加上 k,最后一起算的时候 再乘上与根 相差层数,两个树状数组都以与主根 相差层数为基准。这样 就能够了

然后这个取余不知道怎么了。一直WA,后来我手写了一个 MODE函数才过,原来直接取模 我也考虑了负数 要多加一个MOD可是 还是WA,为什么别人能够 我就不行了 郁闷

#define MOD 1000000007int n,tot;int vis[300000 + 55];int le[300000 + 55],ri[300000 + 55];ll ad[300000 + 55],sub[300000 + 55];vector<int > G[300000 + 55];void init() {for(int i=0;i<300000 + 55;i++)G[i].clear();memset(vis,0,sizeof(vis));memset(ad,0,sizeof(ad));memset(sub,0,sizeof(sub));memset(le,0,sizeof(le));memset(ri,0,sizeof(ri));tot = 0;
}bool input() {while(cin>>n) {for(int i=2;i<=n;i++) {int x;scanf("%d",&x);G[x].push_back(i);}return false;}return true;
}void dfs(int u,int cnt) {tot++;le[u] = tot;for(int i=0;i<G[u].size();i++) {int v = G[u][i];dfs(v,cnt + 1);}vis[u] = cnt;ri[u] = tot;
}ll MODE(ll x) {if(x >= MOD)x %= MOD;else if(x < 0ll)x = (x + MOD)%MOD;return x;
}int lowbit(int x) {return x&(-x);
}void add1(int i, ll val) {while (i <= tot) {ad[i] += val;ad[i] = MODE(ad[i]);i += lowbit(i);}
}void add2(int i,ll val) {while(i <= tot) {sub[i] += val;sub[i] = MODE(sub[i]);i += lowbit(i);}
}ll get_sum1(int i) {ll sum = 0;while (i > 0) {sum += ad[i];sum = MODE(sum);i -= lowbit(i);}return sum;
}ll get_sum2(int i) {ll sum = 0ll;while(i > 0) {sum += sub[i];sum = MODE(sum);i -= lowbit(i);}return sum;
}void cal() {dfs(1,0);int q;cin>>q;while(q--) {int type;scanf("%d",&type);if(type == 1) {int v;ll x,k;scanf("%d %I64d %I64d",&v,&x,&k);x = (x + (vis[v] - 1) * k)%MOD;add1(le[v],x);add1(ri[v] + 1,-x);add2(le[v],k);add2(ri[v] + 1,-k);}else {int v;scanf("%d",&v);ll xx = get_sum1(le[v]);ll yy = get_sum2(le[v]);ll ans = MODE(xx - MODE((vis[v] - 1) * yy));printf("%I64d\n",ans);}}
}void output() {}int main() {while(true) {init();if(input())return 0;cal();output();}return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/blfshiye/p/4754489.html

CodeForces 396C 树状数组 + DFS相关推荐

  1. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

  2. [BZOJ 2434][Noi2011]阿狸的打字机(AC自动机+树状数组+dfs序)

    Description 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: ·输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母 ...

  3. HDU - 5877 Weak Pair(离散化+树状数组+dfs序)

    题目链接:点击查看 题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件: u是v的祖先: ; 问给定的树中有多少个weak pair: 题目分析: ...

  4. CodeForces 314C 树状数组 + dp

    //CodeForces 314C //分析:相当于求给定序列的不降子序列的个数,从一个空序列开始将得到的不降子序列不断的延长是典型的做法,则dp[i]表示以第 i 个元素结尾的序列 //思路:O(n ...

  5. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序

    [BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...

  6. Apple Tree(树状数组+dfs序+邻接表数组(链式前向星) )

    链接:http://poj.org/problem?id=3321 Description There is an apple tree outside of kaka's house. Every ...

  7. hdu 6203 ping ping ping(贪心+树状数组+dfs序)

    题目链接:hdu 6203 ping ping ping 题意: 给你一棵n+1个节点树,现在有q条路径不通,问你最少有多少个节点坏掉了. 题解: 考虑贪心,对这q条路径求一下lca,按照lca的深度 ...

  8. 牛客练习赛22 E 树状数组 + DFS + 拓展欧几里德定理

    题目链接 题意: 给定一个长度为nnn的序列,进行mmm次操作,操作有两类: 111 LLL RRR vvv : 区间[L,R][L, R][L,R]的每个数加上vvv 222 LLL RRR ppp ...

  9. 1103: [POI2007]大都市meg(dfs序+线段树||树状数组)

    Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1-n ...

最新文章

  1. 云时代传统服务器被“唱衰”,服务器厂商面临“大考”
  2. Windows 7/Windows 8都有上帝模式
  3. python课程索引-0222
  4. 颜色模型和颜色应用---颜色选择及其应用
  5. C/C++常量数据类型
  6. Delphi+GDI
  7. 防止 MySQL-PHP 网站被玩弄的方法
  8. 测试案例分享:淘宝网用户体验测试出现的8个问题及测试方法公开
  9. 智能家居竞品分析:米家/HomeKit/美居/涂鸦智能的体验与思考
  10. jQuery初学笔记一,美元符号$
  11. 阿里云历时13年,站上世界现代计算架构之巅
  12. 视频格式与编码压缩标准 mpeg4,H.264.H.265 有什么关系?
  13. 根据图片地址上传图片
  14. 常见机器学习算法适合使用的业务场景汇总(1)
  15. NFS挂载问题:mount.nfs: access denied by server while mounting 192.168.1.100:/home/rootfs
  16. OOC 面向对象C语言编程实践
  17. win7搜索文件 服务器,win7系统搜索不到文件的解决方法
  18. ViewData、ViewBag和 TempData
  19. appium滑动操作(向上、向下、向左、向右滑动)
  20. excel打印预览在哪里_简单实用的excel打印技巧 建议收藏

热门文章

  1. 网站SEO优化如何保证收录量?
  2. linux磁盘怎么分区比较好,500G的硬盘,怎么分区比较合理?
  3. python答案2019版_程序设计语言Python_2019答案章节答案期末答案
  4. 奔跑吧Linux内核 入门篇(第二版)遇到问题发
  5. 乐观锁和悲观锁,可重入锁和不可重入锁(1)
  6. LeakCanary(一)使用篇
  7. CSS使用线性渐变实现滚动进度条
  8. python 给定URL 如何获取其内容,并将其保存至HTML文档。
  9. 《web全栈工程师的自我修养》阅读笔记
  10. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)