[2018.11.05 T3] 零食
暂无链接
零食
题目背景
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<=1000n,Q<=1000n,Q<=1000
对于70%70\%70%的数据,保证n,Q<=100000n,Q<=100000n,Q<=100000
对于100%100\%100%的数据,保证n,Q<=500000n,Q<=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] 零食相关推荐
- 2018.11.05 NOIP模拟 规避(最短路计数)
传送门 正难则反. 考虑计算两人相遇的方案数. 先正反跑一遍最短路计数. 然后对于一条在最短路上的边(u,v)(u,v)(u,v),如果(dis(s,u)*2<total&&di ...
- QIIME 2用户文档. 7差异丰度分析gneiss(2018.11)
文章目录 前情提要 QIIME 2用户文档. 7差异丰度分析gneiss 创建`balances` 选项1:相关性聚类 选项2:梯度聚类 用平衡建立线性模型 Reference 译者简介 猜你喜欢 写 ...
- Java第十二天~第十三天/11.04~11.05
第十二天/11.04 一.选择排序 从0索引开始,用它对应的元素依次和后面索引对应的元素进行比较,小的往前放,第一次比较完毕后,最小值出现在最小索引处,依次比较,就可以得到一个排好序的数组. pack ...
- QIIME 2用户文档. 18使用q2-vsearch聚类OTUs(2018.11)
文章目录 前情提要 使用`q2-vsearch`聚类序列为OTUs 下载数据 序列去冗余 特征[频率]和特征数据[序列]的聚类 无参聚类 有参聚类 半有参聚类 Reference 译者简介 猜你喜欢 ...
- QIIME 2用户文档. 17序列双端合并read-joining(2018.11)
文章目录 前情提要 序列双端合并的另一种方法`read-joining` 数据下载 序列合并 查看合并序列的数据质量和摘要 序列质控 Deblur 查看Deblur特征表 导入双端合并的序列 导入序列 ...
- QIIME 2用户文档. 16鉴定和过滤嵌合体序列q2-vsearch(2018.11)
文章目录 前情提要 鉴定和过滤嵌合体序列`q2-vsearch` 数据下载 无参嵌合体鉴定 可视化统计结果 过滤特征表和序列 过滤嵌合体和可疑序列 过滤嵌合但保留可疑序列 Reference 译者简介 ...
- QIIME 2用户文档. 15进行纵向和成对样本比较q2-longitudinal(2018.11)
文章目录 前情提要 进行纵向和成对样本比较`q2-longitudinal` 成对差异比较 线性混合效应模型 波动性分析 跟踪变化率的第一个差异 从静态时间点跟踪变化率 非参数微生物相关性试验(NMI ...
- QIIME 2用户文档. 14机器学习预测样品元数据分类和回归q2-sample-classifier(2018.11)
文章目录 前情提要 预测样本元数据`q2-sample-classifier` 预测样本分类 预测样本连续型元数据 嵌套交叉验证为所有样本提供预测 最佳实践:不应该使用`q2-sample-class ...
- QIIME 2用户文档. 13数据评估和质控Evaluating and controlling(2018.11)
文章目录 前情提要 数据评估和质控`q2-quality-control` 下载数据 基于比对过滤序列 质量评估已知组成的样品 评估序列质量 Reference 译者简介 猜你喜欢 写在后面 前情提要 ...
- QIIME 2用户文档. 12训练特征分类器Training feature classifiers(2018.11)
文章目录 前情提要 训练特征分类器 下载并导入参考序列 提取参考序列 训练分类集 测试分类集 分类真菌ITS序列 Reference 译者简介 猜你喜欢 写在后面 前情提要 QIIME 2可重复.交互 ...
最新文章
- 2007图灵奖得主离开了:模型检测先驱Edmund Clarke因新冠逝世
- c++迭代器的一个例子
- cocos2d-x初探学习笔记(8)--场景特效
- Python中机器学习的特征选择技术
- hdoj 1015 Safecracker
- Spring Boot 项目的这些文件都是干啥用的?
- Android做的第一个小程序
- 动态规划计算字符相似度感觉棒棒哒
- solaris与linux区别,Solaris和Linux的区别
- 微信/支付宝扫码支付流程
- office03-07兼容包
- ubuntu如何安装本地deb文件
- 同样是路过式,登录与下载攻击区别何在?
- getch方法_C语言 getch()用法及代码示例
- Python常用函数总结(按照字母顺序)
- 在CAD里怎么测量面积?
- 公司企业如何制作微信小程序店铺?
- 一个牛逼的程序员是什么样的?
- 锥,凸锥,二阶锥,二阶锥规划
- Android 抛弃原生WebView,使用腾讯X5内核、并加入广告拦截。