#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define ll long long
#define INF 2147483647
#define ll_INF 9223372036854775807
using namespace std;
inline int read(){
int x = 0,tmp = 1;char ch = getchar();
while( ch < '0' || ch > '9' ) {if ( ch == '-' ) tmp = -1; ch = getchar();}
while( ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar(); }
return x * tmp;
}
struct Point {
int to, next;
} edge[21000];
int head[21000], idx = 0, w[21000], dep[21000], f[21000][16], sum[21000];
int maxdep, C[21000];
inline void ade( int u, int v ) {
edge[++ idx].to = v;
edge[idx].next = head[u];
head[u] = idx;
}
void dfs( int x ) {
for( int i = 1 ; i <= 15 ; ++ i ) {
if( dep[x] < ( 1 << i ) ) break;
f[x][i] = f[f[x][i - 1]][i - 1];
}
for( int i = head[x] ; i != -1 ; i = edge[i].next ) {
int now = edge[i].to;
dep[now] = dep[x] + 1;
f[now][0] = x;
if( dep[now] % 2 == 0 ) w[now] = -w[now];
sum[now] = w[now] + sum[x];
dfs( now );
}
}
inline int lca( int u, int v ) {
if( dep[u] > dep[v] ) swap( u, v );
for( int i = 15 ; i >= 0 ; -- i ) if( dep[f[v][i]] >= dep[u] ) v = f[v][i];
if( u == v ) return u;
for( int i = 15 ; i >= 0 ; -- i ) if( f[v][i] != f[u][i] ) v = f[v][i], u = f[u][i];
return f[u][0];
}
inline int query( int k ) {
if( k < 1 ) return 0;
int ret = 0;
for( int i = k ; i ; i -= i&-i ) ret += C[i];
return ret;
}
int main(){
memset( dep, 0, sizeof( dep ) );
memset( head, -1, sizeof( head ) );
int N = read(), Q = read();
for( int i = 1 ; i <= N ; ++ i ) w[i] = read();
int boss;
for( int i = 1 ; i <= N ; ++ i ) {
int u = read();
if( u == -1 ) {
boss = i;
continue;
}
ade( u, i );
}
dep[boss] = 1; sum[boss] = w[boss]; f[boss][0] = 0;
dfs( boss );
maxdep = 0;
for( int i = 1 ; i <= N ; ++ i ) maxdep = max( maxdep, dep[i] );
for( int i = 1 ; i <= Q ; ++ i ) {
char ch = getchar();
while( ch != 'M' && ch != 'A' ) ch = getchar();
if( ch == 'M' ) {
int lv = read(), t = read();
if( lv % 2 == 0 ) t = -t;
for( int i = lv ; i <= maxdep ; i += i&-i ) C[i] += t;
} else {
int x = read(), y = read();
int k = lca( x, y );
int ans = sum[x] + sum[y] + w[k] - 2 * sum[k] + query( dep[x] ) + query( dep[y] ) - query( dep[k] ) - query( dep[k] - 1 );
printf( "%d\n", abs( ans ) );
}
} return 0;
} /**************************************************************
Problem: 1028
User: ARZhu
Language: C++
Result: 正确
Time:0 ms
Memory:3428 kb
****************************************************************/

vijos1710 Mrw的工资计划的更多相关文章

  1. JDOJ 2225 工资计划

    JDOJ 2225: 工资计划 https://neooj.com/oldoj/problem.php?id=2225 Description 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零 ...

  2. 评点SAP HR功能及人力资源管理软件

    评点SAP HR功能及人力资源管理软件   本文导航 第1页:my SAP 人力资源软件 第2页:my SAP HR协同功能 第3页:组织结构管理 第4页:mySAPTM HR的战略功能 第5页:集成 ...

  3. 实战java虚拟机的学习计划图(看懂java虚拟机)

    啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...

  4. 如何用分析函数找出EMP表中每个部门工资最高的员工

    EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...

  5. 2014总结&2015计划

    2014总结&2015计划 今天是2015/1/1,新的一年终于到来了,昨天老板要求提交2014的工作总结和2015的工作计划,正好提醒我,要总结和计划了. 先回顾2014年初的计划: 新年计 ...

  6. HDU--杭电--4502--吉哥系列故事——临时工计划--背包--01背包

    吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  7. 工资不高也要给自己放假 这几款APP估计你用得上

    我是这样的一个人,我宁愿工资不高,只要给我足够的假期,那我就满足了.都说上班就是为了赚钱,但如果身体不好,赚再多的钱也是无福享受,所以建议各位,有机会的话,一定要抽出时间去旅游,去放松. 现在我们外出 ...

  8. HTML5-前端开发很火且工资很高?

    前言 晚上逛论坛看到一篇对从事HTML5前端开发的文章写的非常不错,和目前的市场形势差不多,然后我在其基础上给大家进行加工总结一下分享给大家.今天我们谈论的话题是<<为什么从事HTML5前 ...

  9. Filecoin官方更新: Q4工作进展和2018年工作计划

    ICO过后,Filecoin团队一直没有对外更新过工作计划(很多投资人都等待的不耐烦了).经过漫长的等待,在新年的第一个工作日,我们终于等来了来自于filecoin团队的声音, 这次更新真是出乎小编的 ...

随机推荐

  1. Java中的Set集合以及HashSet

    Set集合: Set继承自Collection,所以没有什么特别的方法. 需要注意的是,Set集合不包含重复元素,我们重点了解Set集合如何保证不包含多余元素. HashSet: HashSet如何保 ...

  2. common配置文件

    <dependencies> <dependency> <groupId>com.github.pagehelper</groupId> <art ...

  3. 快速求排列C(m,n)加取模

    快速求排列组合C(m,n)%mod 写在前面: 1. 为防止产生n和m的歧义,本博文一律默认n >= m 2. 本博文默认mod = 10^6+3 3. 本博文假设读者已知排列组合公式 C(m, ...

  4. 第十四届华中科技大学程序设计竞赛 K--Walking in the Forest

    链接:https://www.nowcoder.com/acm/contest/106/K来源:牛客网 题目描述 It’s universally acknowledged that there’re ...

  5. linux进阶之路(二):linux文件目录

    Linux的目录结构: Linux文件系统采用级层式的目录结构,最上层是根目录"/",在此目录下再创建其他目录. 树状的文件目录.再Linux世界,一切皆文件. /etc 所有系统 ...

  6. 剑指offer——56在排序数组中查找数字

    题目描述 统计一个数字在排序数组中出现的次数.   题解: 使用二分法找到数k然后向前找到第一个k,向后找到最后一个k,即可知道有几个k了 但一旦n个数都是k时,这个方法跟从头遍历没区别,都是O(N) ...

  7. python中字符串输出格式

    print输入格式总结 通过使用ljust(),center(),rjust()函数来实现输入字符串的左右对齐,居中,右对齐等操作; 方法一:(函数不带参数,则默认以空格填充,注意:文字与空格总字符数 ...

  8. linux 编译指定库、头文件的路径问题(转)

    1. 为什么会出现undefined reference to 'xxxxx'错误? 首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得 ...

  9. js进阶之路,关于UI资源的优化(转载)

    以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...

  10. C语言结构体数组

    #include <stdio.h> int main() { /*************************************************** *结构体数组:数组 ...