暂无链接

零食

题目背景

TomTomTom最终还是放弃了买牛奶,选择了买零食。

题目描述

由于TomTomTom是一只有收集癖的猫,他会把很多零食堆在他的窝里面。

TomTomTom的窝由nnn个独立的房间组成,房间与房间之间有n−1n−1n−1条过道,且从任意一个独立的房间可以经过过道到达其他所有的房间,TomTomTom的窝的入口在111号房间处。

由于TomTomTom买了太多的零食,所以他每次会选择一个房间,携带巨量零食,从猫窝的入口走到这个房间。他会在走过的房间里做上记号,方便等会儿原路返回。(目标房间不会被做上记号)

到达这个目标房间后,TomTomTom会从这个房间开始,把所有 可以不经过做了记号房间就可以达到的房间 中堆满零食。做完后,他会沿着他放下的记号离开猫窝,并且把这些记号抹去。

JerryJerryJerry听说TomTomTom买了很多零食,再加上他今天很饿,于是他决定去偷吃一部分。

JerryJerryJerry每次会选择一个房间,从111号房间进入TomTomTom的窝,然后直接走向那个房间。他会把路上经过的所有房间中的所有零食全部吃掉。

由于TomandJerryTom\ and\ JerryTom and Jerry有很多集,这样的事情也不可能只发生了一次。

TomTomTom在多次买来零食后,发现自己的零食仿佛被人吃掉了不少,于是他心生好奇:在我的窝里的某个房间里,现在还有没有零食啊?

请编写一个程序帮TomTomTom解决这个问题。

一句话题意:

给定一颗nnn个点,111号节点为根的树,支持三种操作:

给定子树中所有点的权值赋值为111,从根到某个节点的路径上所有点的权值赋值为000,查询一个点的权值。

输入格式

第一行输入一个整数nnn,代表TomTomTom的窝有nnn个房间。

接下来n−1n−1n−1行,每行输入两个数字l,rl,rl,r,代表TomTomTom的窝中,编号为lll的房间与编号为rrr的房间之间有一条过道。

下一行输入一个整数QQQ,代表接下来有QQQ次 有关零食的事件或TomTomTom的好奇。

接下来QQQ行,每行两个数t,kt,kt,k

若t=1t=1t=1,则表示TomTomTom按照上述规则走到了kkk号房间,并堆了一波零食。

若t=2t=2t=2,则表示JerryJerryJerry光顾了TomTomTom的窝,从111号房间走到kkk号房间,顺便吃掉了路上房间的零食。

若t=3t=3t=3,则表示TomTomTom现在很好奇,kkk号房间中还有没有零食。

输出格式

对于每一个t=3t=3t=3,你需要输出一行一个数字。

若房间中有零食,则输出111,否则输出000。

输入样例

5
1 2
5 1
2 3
4 2
12
1 1
2 3
3 1
3 2
3 3
3 4
1 2
2 4
3 1
3 3
3 4
3 5

输出样例

0
0
0
1
0
1
0
1

数据范围

对于40%40\%40%的数据,保证n,Q&lt;=1000n,Q&lt;=1000n,Q<=1000

对于70%70\%70%的数据,保证n,Q&lt;=100000n,Q&lt;=100000n,Q<=100000

对于100%100\%100%的数据,保证n,Q&lt;=500000n,Q&lt;=500000n,Q<=500000

出题人会尽力卡掉Q×Log2(n)Q×Log^2(n)Q×Log2(n)的同学

题解

子树操作的话用线段树+dfsdfsdfs序就可以了,点到根的路径的话有点奇妙,因为点到根的路径与子树是互逆的关系,我们把赋值为000的标记打到链的最底端,子树赋值为111时查询自己子树内有没有000,如果有的话就把标记扔到自己父亲那儿,然后区间赋值即可,查询同理。

代码
#include<bits/stdc++.h>
#define add(a,b) nxt[++cnt]=head[a],head[a]=cnt,to[cnt]=b
#define ls v<<1
#define rs ls|1
using namespace std;
const int M=5e5+5;
int head[M],nxt[M<<1],to[M<<1],dfn[M],dad[M],ri[M],n,m,cnt,df;
bool all[M<<2],tag[M<<2];
void dfs(int v,int f){dfn[v]=++df,dad[v]=f;for(int i=head[v];i;i=nxt[i])if(to[i]!=f)dfs(to[i],v);ri[v]=df;}
void up(int v){all[v]=all[ls]&all[rs];}
void push(int v){if(tag[v])all[ls]=tag[ls]=all[rs]=tag[rs]=1;tag[v]=0;}
bool ask(int v,int l,int r,int lb,int rb)
{if(lb<=l&&r<=rb)return all[v];int mid=l+r>>1,ans=1;push(v);if(lb<=mid)ans=ask(ls,l,mid,lb,rb);if(mid<rb)ans&=ask(rs,mid+1,r,lb,rb);up(v);return ans;
}
void modi(int v,int l,int r,int lb,int rb)
{if(lb<=l&&r<=rb){tag[v]=all[v]=1;return;}int mid=l+r>>1;if(lb<=mid)modi(ls,l,mid,lb,rb);if(mid<rb)modi(rs,mid+1,r,lb,rb);
}
void modi(int v,int l,int r,int pos)
{if(l==r){all[v]=0;return;}int mid=l+r>>1;push(v);if(pos<=mid)modi(ls,l,mid,pos);else modi(rs,mid+1,r,pos);up(v);
}
void in(){scanf("%d",&n);for(int i=1,a,b;i<n;++i)scanf("%d%d",&a,&b),add(a,b),add(b,a);}
void ac()
{dfs(1,0);scanf("%d",&m);for(int op,a;m--;){scanf("%d%d",&op,&a);if(op==1){if(!ask(1,1,n,dfn[a],ri[a]))modi(1,1,n,dfn[dad[a]]);modi(1,1,n,dfn[a],ri[a]);}else if(op==2)modi(1,1,n,dfn[a]);else printf("%d\n",ask(1,1,n,dfn[a],ri[a]));}
}
int main(){in(),ac();}

[2018.11.05 T3] 零食相关推荐

  1. 2018.11.05 NOIP模拟 规避(最短路计数)

    传送门 正难则反. 考虑计算两人相遇的方案数. 先正反跑一遍最短路计数. 然后对于一条在最短路上的边(u,v)(u,v)(u,v),如果(dis(s,u)*2<total&&di ...

  2. QIIME 2用户文档. 7差异丰度分析gneiss(2018.11)

    文章目录 前情提要 QIIME 2用户文档. 7差异丰度分析gneiss 创建`balances` 选项1:相关性聚类 选项2:梯度聚类 用平衡建立线性模型 Reference 译者简介 猜你喜欢 写 ...

  3. Java第十二天~第十三天/11.04~11.05

    第十二天/11.04 一.选择排序 从0索引开始,用它对应的元素依次和后面索引对应的元素进行比较,小的往前放,第一次比较完毕后,最小值出现在最小索引处,依次比较,就可以得到一个排好序的数组. pack ...

  4. QIIME 2用户文档. 18使用q2-vsearch聚类OTUs(2018.11)

    文章目录 前情提要 使用`q2-vsearch`聚类序列为OTUs 下载数据 序列去冗余 特征[频率]和特征数据[序列]的聚类 无参聚类 有参聚类 半有参聚类 Reference 译者简介 猜你喜欢 ...

  5. QIIME 2用户文档. 17序列双端合并read-joining(2018.11)

    文章目录 前情提要 序列双端合并的另一种方法`read-joining` 数据下载 序列合并 查看合并序列的数据质量和摘要 序列质控 Deblur 查看Deblur特征表 导入双端合并的序列 导入序列 ...

  6. QIIME 2用户文档. 16鉴定和过滤嵌合体序列q2-vsearch(2018.11)

    文章目录 前情提要 鉴定和过滤嵌合体序列`q2-vsearch` 数据下载 无参嵌合体鉴定 可视化统计结果 过滤特征表和序列 过滤嵌合体和可疑序列 过滤嵌合但保留可疑序列 Reference 译者简介 ...

  7. QIIME 2用户文档. 15进行纵向和成对样本比较q2-longitudinal(2018.11)

    文章目录 前情提要 进行纵向和成对样本比较`q2-longitudinal` 成对差异比较 线性混合效应模型 波动性分析 跟踪变化率的第一个差异 从静态时间点跟踪变化率 非参数微生物相关性试验(NMI ...

  8. QIIME 2用户文档. 14机器学习预测样品元数据分类和回归q2-sample-classifier(2018.11)

    文章目录 前情提要 预测样本元数据`q2-sample-classifier` 预测样本分类 预测样本连续型元数据 嵌套交叉验证为所有样本提供预测 最佳实践:不应该使用`q2-sample-class ...

  9. QIIME 2用户文档. 13数据评估和质控Evaluating and controlling(2018.11)

    文章目录 前情提要 数据评估和质控`q2-quality-control` 下载数据 基于比对过滤序列 质量评估已知组成的样品 评估序列质量 Reference 译者简介 猜你喜欢 写在后面 前情提要 ...

  10. QIIME 2用户文档. 12训练特征分类器Training feature classifiers(2018.11)

    文章目录 前情提要 训练特征分类器 下载并导入参考序列 提取参考序列 训练分类集 测试分类集 分类真菌ITS序列 Reference 译者简介 猜你喜欢 写在后面 前情提要 QIIME 2可重复.交互 ...

最新文章

  1. 2007图灵奖得主离开了:模型检测先驱Edmund Clarke因新冠逝世
  2. c++迭代器的一个例子
  3. cocos2d-x初探学习笔记(8)--场景特效
  4. Python中机器学习的特征选择技术
  5. hdoj 1015 Safecracker
  6. Spring Boot 项目的这些文件都是干啥用的?
  7. Android做的第一个小程序
  8. 动态规划计算字符相似度感觉棒棒哒
  9. solaris与linux区别,Solaris和Linux的区别
  10. 微信/支付宝扫码支付流程
  11. office03-07兼容包
  12. ubuntu如何安装本地deb文件
  13. 同样是路过式,登录与下载攻击区别何在?
  14. getch方法_C语言 getch()用法及代码示例
  15. Python常用函数总结(按照字母顺序)
  16. 在CAD里怎么测量面积?
  17. 公司企业如何制作微信小程序店铺?
  18. 一个牛逼的程序员是什么样的?
  19. 锥,凸锥,二阶锥,二阶锥规划
  20. Android 抛弃原生WebView,使用腾讯X5内核、并加入广告拦截。

热门文章

  1. 函数在某点附近有界,但该点无极限值的例子
  2. mysql根据id主键查询是找到了就不再遍历后面的数据了吗_MySQL索引相关
  3. 566.重塑矩阵(力扣leetcode) 博主可答疑该问题
  4. java ArrayList添加元素全部一样
  5. python基本使用时常见错误
  6. flask-script插件
  7. 28. Implement strStr()
  8. 简单几步配置gitlab
  9. [导入]在windows下建立的自己cvsnt服务器
  10. a星算法的优缺点_轻松理解机器学习算法:C4.5算法