Timus 1329. Galactic History
来源:互联网 发布:淘宝卖家中心在哪 编辑:程序博客网 时间:2024/06/09 16:47
原题:1329
题意:给出一棵n个节点的树,问m对节点的从属关系
解法:因为n较大,若对于每一个子问题都进行一次搜索并定会超时。其实只要进行一次dfs,记录每一个节点出现的初始时间和结束时间,这样就可以保证每一个节点出现的时间必定比其下方的节点出现时间早,结束时间晚。~~(这种方法亦可以求最近公共祖先)
代码实现我应用的是模拟指针…
#include <iostream>using namespace std;int a[100000], next[100000], n, last[50000] = {0}, tot = 0, sum = 0;int f[50100][3] = {0};void insert(int x, int y) { a[tot] = y; next[tot] = last[x]; last[x] = tot; tot++;}void dfs(int t) { sum++; if (f[t][1] == 0) f[t][1] = sum; f[t][2] = sum; int k = last[t]; while (k != 0) { if (f[a[k]][1] != 0) { k = next[k]; continue; } dfs(a[k]); sum++; f[t][2] = sum; k = next[k]; }}int main() { cin >> n; int s; for (int i = 1; i <= n; i++) { int x, y; cin >> x >> y; if (x == -1) s = y; else if (y == -1) s = x; else { insert(x, y); insert(y, x); } } dfs(s); int m; cin >> m; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; if (f[x][1] < f[y][1] && f[x][2] > f[y][2]) cout << 1 << endl; else if (f[y][1] < f[x][1] && f[y][2] > f[x][2]) cout << 2 << endl; else cout << 0 << endl; }}
0 0
- Timus 1329. Galactic History
- URAL 1329. Galactic History
- Timus 1329. Galactic History。LCA最近公共祖先或dfs递归离线处理!
- URAL-1329 Galactic History
- Galactic History URAL
- URAL 1329 Galactic History (DFS)
- URAL1329 Galactic History(深搜DFS)
- Galactic History(方法巧妙,思维灵活)
- zstu 4116: Galactic Warlords
- uva 11165 Galactic Travel
- The Galactic Olympics ///dp
- Galactic Collegiate Programming Contest
- history
- history
- history
- history
- history
- history
- (转载)CSS3自定义滚动条样式 -webkit-scrollbar
- pb数据窗口数据输入的下拉选择效果
- Codeforces 583C GCD Table 【gcd + 构造】
- UIBezierPath介绍
- springMVC(6)------POJO对象绑定请求参数值使用
- Timus 1329. Galactic History
- 设计模式之接口型适配器模式
- Android:AIDL使用详解
- io操作小结
- HashMap实现简单航班查询
- 一篇博客说完HTML
- ObjectAnimator的简单使用
- 断点调试
- 五.服务器提高性能的建议