POJ 1470 Closest Common Ancestors
2016-04-02 12:20
381 查看
输入搞得这么复杂。
#include <cstdio> #include <iostream> #include <vector> #include <map> using namespace std; const int MAX = 1005; int fa[MAX], r[MAX], vis[MAX], ancestor[MAX]; vector<int> tree[MAX]; vector<int> q[MAX]; map<int, int> m; int flag[MAX]; inline void file() { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); } void init(int n) { for (int i = 1; i <= n; i++) { fa[i] = i; r[i] = 1; vis[i] = 0; tree[i].clear(); q[i].clear(); ancestor[i] = i; flag[i] = 0; } m.clear(); } int find_father(int x) { return fa[x] == x ? x : fa[x] = find_father(fa[x]); } void unite(int a, int b) { a = find_father(a); b = find_father(b); if (a == b) return ; if (r[a] < r[b]) { fa[a] = b; } else { fa[b] = a; if (r[a] == r[b]) r[a]++; } } void tarjan(int x) { int lenth = tree[x].size(); for (int i = 0; i < lenth; ++i) { tarjan(tree[x][i]); unite(x, tree[x][i]); ancestor[find_father(x)] = x; } vis[x] = 1; //printf("%d ancestor is %d\n", x, ancestor[x]); int lenth2 = q[x].size(); for (int i = 0; i < lenth2; ++i) { if (vis[q[x][i]]) { // printf("%d and %d ancestor is %d\n", x, q[x][i], ancestor[q[x][i]]); m[ancestor[find_father(q[x][i])]]++; } } } int main() { int n; // file(); while (scanf("%d", &n) != EOF) { init(n); int vertic, son_num; for (int i = 1; i <= n; ++i) { scanf("%d:(%d)", &vertic, &son_num); int tmp; for (int i = 1; i <= son_num; ++i) { scanf("%d", &tmp); tree[vertic].push_back(tmp); flag[tmp] = 1; } } int q_times, a, b; scanf("%d", &q_times); for (int i = 0; i < q_times; ++i) { scanf(" (%d%d)", &a, &b); q[a].push_back(b); q[b].push_back(a); } int root; for (int i = 1; i <= n; ++i) { if (!flag[i]) { root = i; break; } } tarjan(root); for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { printf("%d:%d\n", it -> first, it -> second); } } return 0; }
相关文章推荐
- Deep Learning---Overview
- 输出数中最小的一个数在最后!!!
- [置顶] js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- [POJ 1149]PIGS[最大流][建图]
- Spring的jar包描述
- 使用Struts实现防止表单重复提交
- c的详细学习(3)数据的输入输出
- JS判断元素类型
- 算法总结(0)目录式概括
- JAVA中String的常用方法?
- ListView的异步加载图片问题与优化
- 【JQuery】使用hover()方法切换事件
- 妙味课堂——HTML+CSS(第一课)
- Could not start GlassFish Server 4.1 occupied by null
- centos7-初始化配置
- 低功耗蓝牙4.0BLE编程-nrf51822开发(3)
- 团队作业(一)
- tuple是固定的list
- 牛B的JustDecompile
- JS中继承的几种用法