CodeForces 208E Blood Cousins
来源:互联网 发布:测试显示器的软件 编辑:程序博客网 时间:2024/06/03 15:43
CodeForces 208E Blood Cousins
题目描述:
给一片有根森林(我知道不是这么个说法但自己意会就可以了),进行若干次询问,每次询问
题解:
首先
对于每一组询问,找到
题目链接: vjudge 原网站
代码:
#include <vector>#include <cstdio>#include <cstdlib>#include <cstring>#include <climits>#include <algorithm>using namespace std;#define MAXN 100010static struct{ int v, next;} edge[MAXN];static int N, M, G, dfn_tot;static int fa[MAXN][20], head[MAXN], dep[MAXN], dfn[MAXN][2];static vector<int> pos[MAXN];inline void add_edge(int u, int v){ edge[G].v = v; edge[G].next = head[u]; head[u] = G++;}void dfs(int x){ for (int i = 1; i < 20; i++) fa[x][i] = fa[fa[x][i-1]][i-1]; pos[dep[x] = dep[fa[x][0]] + 1].push_back(dfn[x][0] = ++dfn_tot); for (int i = head[x]; ~i; i = edge[i].next) dfs(edge[i].v); dfn[x][1] = dfn_tot;}int main(){ memset(head, -1, sizeof(head)); scanf("%d", &N); for (int i = 1; i <= N; i++) { scanf("%d", &fa[i][0]); if (fa[i][0]) add_edge(fa[i][0], i); } for (int i = 1; i <= N; i++) if (!fa[i][0]) dfs(i); scanf("%d", &M); while (M--) { int v, p, l, r, lca; scanf("%d%d", &v, &p); lca = v; for (int i = 0; i < 20; i++) if (p & (1 << i)) lca = fa[lca][i]; if (!lca) printf("0 "); else { l = lower_bound(pos[dep[v]].begin(), pos[dep[v]].end(), dfn[lca][0] + 1) - pos[dep[v]].begin(); r = upper_bound(pos[dep[v]].begin(), pos[dep[v]].end(), dfn[lca][1]) - pos[dep[v]].begin(); printf("%d ", r - l - 1); } } return 0;}
提交记录(AC / Total = 1 / 1):
0 0
- 【CodeForces 208E】Blood Cousins
- CodeForces 208E Blood Cousins
- CodeForces 208E Blood Cousins(树剖求lca + dfs序)
- 【CodeForces 208E】Blood Cousins dps序+二分
- codeforces 208 E. Blood Cousins (dsu on the tree)
- Codeforces 246E Blood Cousins Return
- CF 208E Blood Cousins(二分+DFS)
- Codeforces 246E Blood Cousins Return 树上启发式合并
- cf 151.div2 E Blood Cousins Return
- codeforces 246 E. Blood Cousins Return (set+dsu on the tree)
- [Codeforces208E]Blood Cousins(dsu on the tree+倍增)
- [Codeforces246E]Blood Cousins Return(dsu on the tree+set)
- [codeforces208E]Blood Cousins(dsu on the tree+倍增)
- [codeforces246E]Blood Cousins Return(dsu on the tree+STL)
- codeforces 163E e-Government
- 【Codeforces 163E】E-Government
- Codeforces 78E Evacuation
- 【dp】codeforces 83E
- 在eclipse下运行hadoop程序
- HTTP扫盲
- Android应用优化之布局优化
- java开发资源分享(视频,源码,项目)
- memmove函数
- CodeForces 208E Blood Cousins
- linux下 强大的convert命令
- 数据结构之树、二叉树和森林
- 缓存解决并发
- Python模块常用的几种安装方式 windows下xgboost安装 whl文件安装
- std::set 交叉并补
- JavaScript 的Thunk 函数
- Linq to SQL中报错"不允许在查询中显式构造实体类型"怎么解决
- 通向架构师的道路(第二十三天)maven与ant的奇妙整合