题意:给你一棵树的上的两个点,要你求这两个点的最近的父亲节点。
第一行的是m案例数
第二行给你个N,代表有N-1种父子关系,其中a b,a是b的父亲。
第N行就是要你求这两个点的最近的父亲节点。
思路:很简单,不用discuss里面的那些,就直接一个递归寻找出第一个点的所以父亲节点,并做好标记,然后用递归寻找第二个点的父亲节点,如果碰到了标记的话,那么这个点就是他们的最近的那个父亲节点。
1 #include2 #include 3 #define l 100100 4 5 bool mark[l]; 6 int belg[l],ans,flog; 7 8 int bfs(int x) 9 {10 if(mark[x]) {11 mark[x]=false;12 if(!belg[x]) return 0;13 bfs(belg[x]);14 }15 return 0;16 }17 int bfs1(int x)18 {19 if(belg[x]&&mark[x]) bfs1(belg[x]);20 if(!mark[x]&&!flog){21 ans=x;22 flog=1;23 return 0;24 }25 return 0;26 }27 28 int main()29 { 30 int m,n,a,b;31 scanf("%d",&m);32 while(m--)33 {34 scanf("%d",&n);35 memset(belg,0,sizeof(belg));36 memset(mark,true,sizeof(mark));37 for(int i=0;i