题目大意:对树进行m次操作,有两类操作,一种是改变一个点的权值(将0变为1,1变为0),另一种为查询以x为根节点的子树点权值之和,开始时所有点权值为1。

分析:

对树进行dfs,将树变为序列,记录每个点进栈出栈的时间戳作为其对应区间的左右端点,那么其子节点对应区间必在该区间内,对这段区间求和即可,用树状数组进行修改与求和。

代码:

program apple;
type
point=^node;
node=record
x:longint; next:point;
end;
var
a:array[..]of point;
bit:array[..]of longint;
b,v1,v2:array[..]of longint;
g:array[..]of boolean;
n,i,m,d,x,y:longint; c:char;
procedure add(x,y:longint);
var p:point;
begin
new(p); p^.x:=y; p^.next:=a[x]; a[x]:=p;
end;
procedure dfs(x:longint);
var p:point;
begin
inc(d); v1[x]:=d; g[x]:=true; new(p); p:=a[x];
while p<>nil do
begin
if g[p^.x]=false then dfs(p^.x); p:=p^.next;
end;
inc(d); v2[x]:=d;
end;
procedure change(x:longint);
var i,y:longint;
begin
y:=x;
if b[x]= then i:= else i:=-;
x:=v1[x];
while (x<=*n) do
begin inc(bit[x],i); inc(x,x and (-x));end;
b[y]:=-b[y];
end;
function query(x:longint):longint;
var s:longint;
begin
s:=;
while x> do
begin inc(s,bit[x]); dec(x,x and (-x)); end;
exit(s);
end;
begin
readln(n);
for i:= to n- do
begin
readln(x,y);
add(x,y); add(y,x);
end;
d:=; dfs();
for i:= to n do change(i);
readln(m);
for i:= to m do
begin
readln(c,x);
if c='C' then change(x)
else writeln(query(v2[x])-query(v1[x]-));
end;
end.

最新文章

  1. win10U盘 安装
  2. RAID一个硬盘FAIL。
  3. 使用Atlas实现MySQL读写分离
  4. Android--消除“Permission is only granted to system apps”错误
  5. 利用openssl进行RSA加密解密
  6. 分页过滤SQL求总条数SQL正则
  7. struts2 s:textfield
  8. Python之路第四天,基础(4)-装饰器,迭代器,生成器
  9. 玩转Web之Json(一)-----easy ui+ajax + json 中关于Json的解析问题
  10. Cocos2d-x 截图功能
  11. JVM学习之-栈
  12. 创建索引CreateIndex
  13. dell服务器raid设置
  14. React-Native android 开发者记录
  15. Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(二)
  16. python接口自动化测试八:更新Cookies、session保持会话
  17. Linux环境下Web环境搭建——Nginx
  18. NO--10今天带大家回忆回忆“闭包”吧!
  19. 史上最牛逼的纯CSS实现tab选项卡,闪瞎你的狗眼
  20. C#操作AD及Exchange Server总结(二)

热门文章

  1. TypeScript task
  2. Java时间为什么从1970-01-01 00:00:00 000开始
  3. bootstrap table加载数据
  4. preprocessing MinMaxScaler
  5. install cmake,install torch7
  6. jQuery Pagination分页插件--刷新
  7. 标准对象 -------JavaScript
  8. notify()和notifyAll()主要区别
  9. 关于HTML(含HTML5)的块级元素和行级(内联)元素总结
  10. Cannot read property &#39;tap&#39; of undefined