poj1330 求二叉树的公共父节点

来源:互联网 发布:ubuntu 16.04应用商店 编辑:程序博客网 时间:2024/04/30 04:50

一次AC的题,感觉很爽。标程用了vector和DFS。自己写了一个,不用技巧

 

#include<iostream>#include<cstring>using namespace std;int fu[10005],ceng[10005],t,n,tou,wei,ntou,nwei;int p(int n){int num=1,t=n;while(fu[t]){num++;t=fu[t];if(ceng[t])return ceng[n]=num+ceng[t];//加了这句可以节省不少时间 }return ceng[n]=num;}void f(int tou,int wei){int ptou=tou,pwei=wei;while(ptou!=pwei){if(ceng[ptou]>ceng[pwei])ptou=fu[ptou];elsepwei=fu[pwei];}cout<<ptou<<endl;}main(void){cin>>t;while(t--){cin>>n;memset(fu,0,sizeof(fu));memset(ceng,0,sizeof(ceng));for(int i=0;i<n-1;i++){cin>>tou>>wei;fu[wei]=tou;}for(int i=1;i<=n;i++)p(i);cin>>tou>>wei;f(tou,wei);}} 
0 0
原创粉丝点击