Codeforces Round #316 (Div. 2) D计算在一棵子树内某高度的节点
题:https://codeforces.com/contest/570/problem/D
题意:给定一个以1为根的n个节点的树,每个点上有一个字母(a~z),每个点的深度定义为该节点到1号节点路径上的点数.每次询问a,b查询以a为根的子树内深度为b的节点上的字母重新排列之后是否能构成回文串.
分析:很明显是个树上启发式合并。显然,只要深度为bb结点的所有颜色中,至多有一种的数量为奇数就可以构成回文串了。
- #include<bits/stdc++.h>
- using namespace std;
- #define pb push_back
- typedef long long ll;
- const int M=5e5+;
- int sz[M],son[M],deep[M],w[M],countt[M][],ans[M],vis[M];
- char s[M];
- vector<int>g[M];
- vector<pair<int,int> >Q[M];
- void dfs1(int u,int fa){
- sz[u]=;
- deep[u]=deep[fa]+;
- for(int i=;i<g[u].size();i++){
- int v=g[u][i];
- dfs1(v,u);
- sz[u]+=sz[v];
- if(sz[v]>sz[son[u]])
- son[u]=v;
- }
- }
- void update(int u,int k){
- countt[deep[u]][w[u]]+=k;
- for(int i=;i<g[u].size();i++){
- int v=g[u][i];
- if(!vis[v])
- update(v,k);
- }
- }
- void dfs2(int u,int sign){
- for(int i=;i<g[u].size();i++){
- int v=g[u][i];
- if(v!=son[u])
- dfs2(v,);
- }
- if(son[u])
- dfs2(son[u],),vis[son[u]]=;
- update(u,);
- for(int i=;i<Q[u].size();i++){
- int num=;
- int id=Q[u][i].first;
- int d=Q[u][i].second;
- for(int j=;j<;j++){
- if(countt[d][j]&)
- num++;
- }
- if(num>)
- ans[id]=;
- else
- ans[id]=;
- }
- vis[son[u]]=;
- if(!sign)
- update(u,-);
- }
- int main(){
- int n,m;
- scanf("%d%d",&n,&m);
- for(int u,i=;i<=n;i++){
- scanf("%d",&u);
- g[u].pb(i);
- }
- scanf("%s",s);
- for(int i=;i<n;i++)
- w[i+]=s[i]-'a';
- for(int u,v,i=;i<=m;i++){
- scanf("%d%d",&u,&v);
- Q[u].pb(make_pair(i,v));
- }
- dfs1(,);
- dfs2(,);
- for(int i=;i<=m;i++)
- if(ans[i])
- printf("Yes\n");
- else
- printf("No\n");
- return ;
- }
Codeforces Round #316 (Div. 2) D计算在一棵子树内某高度的节点的更多相关文章
- Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和
Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上两两节点之间gcd的和 [Problem Description ...
- Codeforces Codeforces Round #316 (Div. 2) C. Replacement set
C. Replacement Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/proble ...
- Codeforces Codeforces Round #316 (Div. 2) C. Replacement 线段树
C. ReplacementTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/problem ...
- Codeforces Round #316 (Div. 2)
A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
- Codeforces Round #316 (Div. 2) C. Replacement
题意:给定一个字符串,里面有各种小写字母和' . ' ,无论是什么字母,都是一样的,假设遇到' . . ' ,就要合并成一个' .',有m个询问,每次都在字符串某个位置上将原来的字符改成题目给的字符, ...
- Codeforces Round #316 (Div. 2)E. Pig and Palindromes DP
E. Pig and Palindromes Peppa the Pig was walking and walked into the forest. What a strange coinci ...
- Codeforces Round #316 (Div. 2) B. Simple Game
思路:把n分成[1,n/2],[n/2+1,n],假设m在左区间.a=m+1,假设m在右区间,a=m-1.可是我居然忘了处理1,1这个特殊数据.被人hack了. 总结:下次一定要注意了,提交前一定要看 ...
- Codeforces Round #316 (Div. 2) D. Tree Requests dfs序
D. Tree Requests time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
随机推荐
- C++基础--函数模板
函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...
- 如何做好Essay Proofreading?
终于写完了一篇Essay,瞬间感觉人生轻松了好多!别急,想要Essay最终得到高分,你还需要最后一步:论文润色! 换句话说,就是我们需要写完的Essay进行检查校对.那么我们一般需要校对的部分有哪些呢 ...
- Android群英传神兵利器读书笔记——第二章:版本控制神器——Git
本人一直是徐医生的真爱粉,由于参加比赛耽误了8天,导致更新得有点慢,大家见谅 2.1 Git的前世今生 Git是什么 Git安装与配置 2.2 创建Git仓库 Git init Git clone 2 ...
- 用Python在00:00给微信好友发元旦祝福语
2019年的元旦即将来临,这里用Python撸一串简单的代码来实现定点给微信里的所有小伙伴发祝福语 环境说明 Python版本: 不限 第三方库: itchat, schedule 注:所有祝福语来源 ...
- Linux学习-课后练习(第二章命令)20200216
- 四、python杂项
一.pycharm单行和多行注释快捷键 多行注释就一个组合键:选中+Ctrl+/
- Java线程——线程之间的通信
Java中多线程间的通信是怎么实现的? 线程通信的方式: (1)共享变量 线程之间的通信可以通过发送信号,发送信号的一个简单方法就是再共享的对象里面设置信号值.线程A在一个同步块中设置boolean型 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. MySQL临时表只在当前连接可见,如果使用PHP脚本来创建My ...
- UML-GRASP后4种模式
1.多态 1).什么是多态 问题:if-else耦合度过高 解决: 方法1:接口 方法2:超类里需多态的方法前加上{abstract} 2).相关模式 防止异变 大量GoF,如适配器(Adapter) ...
- ACwing算法基础课听课笔记(第一章,基础算法一)(二分)
二分法: 在看这个视频前,我对于二分法是一头雾水的,又加上这个算法平常从来没写过所以打了一年了还没正式搞过.视频提到ACwing上的一道题,我用自以为聪明的方法去做,结果TLE了,实在丢人,不说了,开 ...