1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int N=110; //存储每个点的深度及父元素 int dep[N],fa[N]; //链表:每条边的最后一个点编号,点的值,上个点的值 int fi[N],to[N*2],ne[N*2],k; void add(int u,int v){ k++; to[k] = v; ne[k] = fi[u]; fi[u] = k; } //深搜求每个点的深度和父元素 void dfs(int x,int fath){ fa[x] = fath;//更新每个元素的父元素 dep[x] = dep[fath] + 1;//x的深度 = 父元素深度 + 1 //遍历x能去的点 for(int i = fi[x];i != 0;i = ne[i]){ if(to[i] != fath) dfs(to[i],x); } } int main() { int n; cin>>n; int x,y; cin>>x>>y;//求这两个点的公共祖先 int a,b; for(int i = 1;i < n;i++){ cin>>a>>b; add(a,b); add(b,a); } dfs(1,0); //从较深的元素向上找 while(x != y){ if(dep[x] >= dep[y]) x = fa[x]; else y = fa[y]; } cout<<x; return 0; }
- 1
信息
- ID
- 1085
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者