codeforce 570D Tree Requests(dfs+位运算,好题)
来源:互联网 发布:php b2c商城系统 编辑:程序博客网 时间:2024/05/16 15:16
题意:参考51nod翻译
题解:参考博客
由于这个是离线算法,与处理啊每个结点需要的询问,在dfs访问到该节点时一起处理,因为dfs该结点子树之前子树的信息还不在st中,dfs完后信息已经在st中,所以这两个相异或就是子树的信息了。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define pb push_back#define mp make_pair#define fi first#define se secondtypedef vector<int> VI;typedef long long ll;typedef pair<int,int> PII;const ll mod=1000000007;const int MAXN=500000+100;struct node{int to,next;}edge[MAXN*2];int tol=0;int head[MAXN];void add(int u,int v){edge[++tol].to=v,edge[tol].next=head[u],head[u]=tol;edge[++tol].to=u,edge[tol].next=head[v],head[v]=tol;}vector<PII> query[MAXN];int ans[MAXN],st[MAXN];char s[MAXN];void dfs(int x,int fa,int d){st[d]^=1<<(s[x]-'a'); for(int i=0;i<query[x].size();i++) //先记录dfs之前的状态 {PII t=query[x][i];int j=t.fi,h=t.se;ans[j]^=st[h];}for(int i=head[x];i;i=edge[i].next){int v=edge[i].to;if(v==fa) continue;dfs(v,x,d+1);}for(int i=0;i<query[x].size();i++) //与dfs后的状态比较,就可以知道该子树下的状态 {PII t=query[x][i];int j=t.fi,h=t.se;ans[j]^=st[h];}}int main(){int n,m;scanf("%d%d",&n,&m);rep(i,2,n+1){int v;scanf("%d",&v);add(i,v);}scanf("%s",s+1);rep(i,0,m){int v,h;scanf("%d%d",&v,&h);query[v].pb(mp(i,h));}dfs(1,-1,1);rep(i,0,m){if(ans[i]&(ans[i]-1)) puts("No");else puts("Yes");}return 0;}
0 0
- codeforce 570D Tree Requests(dfs+位运算,好题)
- Codeforces 570D Tree Requests【Dfs序+二分】好题!
- Codeforces 570D TREE REQUESTS dfs序+树状数组
- codeforces 570 D. Tree Requests 树状数组+dfs搜索序
- 【Codeforces 570D 】Tree Requests dfs序+二分
- Tree Requests (dfs序,二进制优化,好题)
- Codeforces 570D,dfs+位运算
- cf#316-codeforces570D - Tree Requests -dfs序+分类再二分+树dp+异或位运算+bitmask(位压缩)
- Codeforces 570 D. Tree Requests
- codeforces 570 D Tree Requests
- Codeforces 570D Tree Requests
- 【CF 570D】Tree Requests
- 【cf 570d】Tree Requests
- codeforces 570D Tree Requests
- Codeforces 570D Tree Requests
- codeforces 570D Tree Requests (树转dfs序,区间统计)
- Codeforces 570D Tree Requests(DFS重标号+树状数组)
- Codeforces 570D TREE REQUESTS dfs序+树状数组 异或
- Html Css 基础小结
- Codeforces Round #378 (Div. 2) D. Kostya the Sculptor __ data structures、map<ii, priority_queue<ii>>
- Android 设计模式之MVC模式
- 运算符
- LoadRunner VuGen脚本增强之参数化
- codeforce 570D Tree Requests(dfs+位运算,好题)
- 11.6培训
- java学习笔记(二)流
- swift 地图定位(四)
- EasyUI插件使用(一)
- ollvm
- leetcode_60. Permutation Sequence 找n的全排列中的第k个序列
- Eclipse编码设置(解决中文字符乱码)
- Java中JPA持久化规范