DFS nbut1218 You are my brother
2015-08-17 19:11
363 查看
传送门:点击打开链接
告诉你一些a和b,b是a的父亲,问节点1和2的辈分关系。
思路:很明显这是一棵树形结构。先从节点连向根建图,然后从节点1出发DFS,这样能找到根节点
然后再从根节点往节点建图,找节点1和节点2的深度,再比较深度
容易错的地方:节点1和节点2可能并不在同一颗树中,这时要输出You are my brother
告诉你一些a和b,b是a的父亲,问节点1和2的辈分关系。
思路:很明显这是一棵树形结构。先从节点连向根建图,然后从节点1出发DFS,这样能找到根节点
然后再从根节点往节点建图,找节点1和节点2的深度,再比较深度
容易错的地方:节点1和节点2可能并不在同一颗树中,这时要输出You are my brother
#include<map> #include<set> #include<cmath> #include<stack> #include<queue> #include<cstdio> #include<string> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #define FIN freopen("input.txt","r",stdin) using namespace std; typedef long long LL; typedef pair<int, int> PII; const int MX = 6e3 + 5; const int INF = 0x3f3f3f3f; int Head[MX], Next[MX], rear; struct Edge { int u, v, cost; } E[MX], S[MX]; void edge_init() { rear = 0; memset(Head, -1, sizeof(Head)); } void edge_add(int u, int v, int cost = 0) { E[rear].u = u; E[rear].v = v; E[rear].cost = cost; Next[rear] = Head[u]; Head[u] = rear++; } int DFS(int u) { for(int i = Head[u]; ~i; i = Next[i]) { int v = E[i].v; return DFS(v); } return u; } void solve(int u, int d, int &a, int &b) { if(u == 1) a = d; if(u == 2) b = d; for(int i = Head[u]; ~i; i = Next[i]) { int v = E[i].v; solve(v, d + 1, a, b); } } int main() { int n, u, v; //FIN; while(~scanf("%d", &n)) { edge_init(); for(int i = 1; i <= n; i++) { scanf("%d%d", &u, &v); S[i].u = u; S[i].v = v; edge_add(u, v); } int root = DFS(1); edge_init(); for(int i = 1; i <= n; i++) { edge_add(S[i].v, S[i].u); } int a = -1, b = -1; solve(root, 0, a, b); if(a == -1 || b == -1) { printf("You are my brother\n"); continue; } if(a == b) { printf("You are my brother\n"); } else if(a > b) { printf("You are my elder\n"); } else { printf("You are my younger\n"); } } return 0; }
相关文章推荐
- C Runtime Library 与 STL
- Objective-C:NSString类的常见用法
- Android-异步HttpClient框架(get/post)
- 定时器的简单实现即回调函数的运用
- 1081. Rational Sum (20) -最大公约数
- linux(七)
- 1079. Total Sales of Supply Chain (25)
- 1081. Rational Sum (20) -最大公约数
- 鸟哥Linux私房菜 基础学习篇读书笔记(10):Linux磁盘和文件系统管理(3)
- SPOJ COT2 树上的莫队算法,树上区间查询
- Ansible
- 利用keepalived实现双台服务器主备高可用
- 动态规划之子序列与子串问题分析
- centos下一个bash: XXX: command not found解决方案
- touchSwipe 上下左右滑动,二指缩放 效果不好。
- PAT 1086. Tree Traversals Again (25)
- Opencv::findContours函数参数说明及相关函数
- html绘制一个带标题的框
- 组件的使用(二)ListView的使用
- 05 魔方