Codeforces Round #316 (Div. 2) D. Tree Requests
2016-05-21 19:05
288 查看
用深搜为每个结点建立一个时间序in[], out[],在搜索过程中把在同一深度,同一颜色结点的时间保存起来。查询的时候,若结点为v, 则所查询的所有节点的时间序在in[v]和out[v]之间,再用二分查找各个颜色结点个数。
#include <bits/stdc++.h> #define maxn 500005 using namespace std; vector<int> v[maxn]; vector<int> f[maxn][26]; int n, m; string s; int in[maxn], out[maxn], tot; void dfs(int h, int x){ in[x] = ++tot; f[h][s[x-1]-'a'].push_back(tot); for(int i = 0; i < v[x].size(); i++) dfs(h+1, v[x][i]); out[x] = tot; } int main(){ // freopen("in.txt", "r", stdin); int a; scanf("%d%d", &n, &m); for(int i = 2; i <= n; i++){ scanf("%d", &a); v[a].push_back(i); } cin >> s; tot = 0; dfs(1, 1); int v, h; for(int i = 0; i < m; i++){ scanf("%d%d", &v, &h); int p = 0; for(int j = 0; j < 26; j++){ int d = upper_bound(f[h][j].begin(), f[h][j].end(), out[v]) - lower_bound(f[h][j].begin(), f[h][j].end(), in[v]); if(d&1) p++; if(p > 1) break; } if(p > 1) puts("No"); else puts("Yes"); } return 0; }
相关文章推荐
- break,continue,与标号
- U3d屏幕自适应
- 02.手把手教你 .Net EasyUI DataGrid(数据表格排序)
- MFC中应用WM_ENDSESSION,WM_QUERYENDSESSION消息截获系统的关机/注销
- POJ-2031-Building a Space Station-(最小生成树 普利姆)
- MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)
- (创建型模式)BUILDER——建造者模式(生成器模式)
- UI基础_UIButton
- android view 的requestLayout和invalidate
- 快速搜索(QuickSearchbox)怎么关联应用(apk)
- UITableableView自定义cell
- 16进制颜色(html颜色值)字符串转为UIColor
- UEditor路径配置
- EasyUI datagrid实现翻页保持checkbox状态
- UI基础_UIView
- UITableView的优化
- UI基础_UICollectionView
- IOS使用NSURLRequest或NSURLSession获取沙河目录下文件数据
- HashMap数据引用时,增加key-value键值对
- iOS - 修改UITextField的placeholder颜色