hrbustOJ 1373Leyni, LOLI and Leaders(图论)
2012-04-27 17:18
323 查看
摘自:http://acm.hrbust.edu.cn/hcpc2012/index.php?act=showpost&p=15
本题是图论题
根据题意,判断一颗树中,某个点是否是另一个点的后裔。根据递归函数的入栈出栈时间戳特点(即子结点的入栈时间戳要晚于自己,而且子节点的出栈时间戳要早于自己)或者括号定理在O(N)内预处理一遍图,即可在O(1)时间完成每次查询。
d[x]表示深度优先搜索中x的访问时间戳
f[x]表示深度优先搜索中x的结束访问时间戳
如果d[u] < d[v] < f[v] < f[u],那么v是u的后裔。
本题是图论题
根据题意,判断一颗树中,某个点是否是另一个点的后裔。根据递归函数的入栈出栈时间戳特点(即子结点的入栈时间戳要晚于自己,而且子节点的出栈时间戳要早于自己)或者括号定理在O(N)内预处理一遍图,即可在O(1)时间完成每次查询。
d[x]表示深度优先搜索中x的访问时间戳
f[x]表示深度优先搜索中x的结束访问时间戳
如果d[u] < d[v] < f[v] < f[u],那么v是u的后裔。
#include <cstdio> #include <cstdlib> #include <iostream> using namespace std; const int N = 100005; bool color ; int d , f , times; struct edge { int v; edge *next; edge(int vv, edge *p) { v = vv; next = p; } }; struct graph { edge *link; }G ; void initG(int n) { for (int i=1; i<=n; ++i) G[i].link = NULL; } void buildG(int u, int v) { edge *p = new edge(v, G[u].link); G[u].link = p; } void dfsVisit(int u) { color[u] = true; d[u] = times = times + 1; for (edge *p=G[u].link; p; p=p->next) { if (!color[p->v]) dfsVisit(p->v); } f[u] = times = times + 1; } void dfs(int n, int s) { for (int i=1; i<=n; ++i) color[i] = false; times = 0; for (edge *p=G[s].link; p; p=p->next) { if (!color[p->v]) dfsVisit(p->v); } } void del(edge *p) { if (!p) return ; del(p->next); delete p; } int main() { int t; scanf ("%d", &t); while (t--) { int q, n, u, v, s; scanf ("%d", &n); initG(n); for (int i=1; i<=n; ++i) { scanf ("%d", &u); if (u) buildG(u, i); else s = i; } buildG(s, s); dfs(n, s); scanf ("%d", &q); while (q--) { scanf ("%d%d", &u, &v); if (d[u] < d[v] && f[v] < f[u]) printf ("%d>%d\n", u, v); else if (d[v] < d[u] && f[u] < f[v]) printf ("%d<%d\n", u, v); else printf ("%d<>%d\n", u, v); } for (int i=1; i<=n; ++i) del(G[i].link); } return 0; }
相关文章推荐
- HLG 1373 Leyni, LOLI and Leaders【括号定理】
- 哈理工oj 1373-Leyni, LOLI and Leaders
- hrbustoj 1104:Leyni, LOLI and Line(解析几何,斜截式的应用)
- Leyni, LOLI and Line hrbust 给出四个点求这四个点确定的两条直线的交点
- Hust oj 1384 Leyni, LOLI and Toasts(水题)
- Hust oj 1104 Leyni, LOLI and Line(线段相交)
- ACM-计算几何之Leyni, LOLI and Line——hrbust1104
- Leyni, LOLI and Toasts
- Leyni, LOLI and Circle
- 哈理工oj 1385-Leyni, LOLI and Toasts II解题报告-多重背包的二进制解法
- Hrbust 1390 Leyni, LOLI and Numbers【思维+树状数组+二分+双向链表模拟】好题!好题!好题!
- 哈理工oj 1392-Leyni, LOLI and Houses解题报告
- 图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces
- 图论/位运算 Codeforces Round #285 (Div. 2) C. Misha and Forest
- LightOJ 1149 Factors and Multiples【最小点覆盖】(这些图论专题的题目都好裸啊)
- [ACM] hrbustoj 1161 Leyni (树状数组)
- Codeforces Round #311 (Div. 2) D. Vitaly and Cycle 图论
- Codeforces 557D - Vitaly and Cycle [二分图染色]【图论】
- [图论训练]BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【floyd】
- 图论 之 最小生成树 (Kruskal and Prim)