POJ 1330Nearest Common Ancestors (树的遍历求解层次性问题)

xiaoxiao2021-02-28  67

#include<iostream> #include<cmath> #include<string.h> #include<algorithm> #include<iomanip> #include<cstdio> #include<string> #include<map> #include<vector> typedef long long ll; using namespace std; const int N=10001; int f[N],r[N]; vector<int> v[N]; void dfs(int u,int dep) { r[u]=dep; for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++) dfs(*it,dep+1); } int main() { int t; scanf("%d",&t); while(t--) { int n,m; int a,b; scanf("%d",&n); memset(f,255,sizeof(f)); for(int i=1;i<=n;i++) v[i].clear(); for(int i=0;i<n-1;i++) { scanf("%d%d",&a,&b); v[a].push_back(b); f[b]=a; } int i; for(i=1;f[i]>=0;i++); dfs(i,0); scanf("%d%d",&a,&b); while(a!=b) { if(r[a]>r[b]) a=f[a]; else b=f[b]; } printf("%d\n",a); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2630979.html

最新回复(0)