📄 好最近公共祖先正常742bilca.cpp
字号:
#include "iostream.h"
#include "fstream.h"
#include "stdio.h"
int complect(int i,int c[],int m)//判断深度
{
if(c[i]!=0)
{
m++;
complect(c[i],c,m);
}
else
return m;
}
int inver(int i,int k,int k1,int a[])//同一层的数
{
if(k<k1)
{
k++;
inver(a[i],k,k1,a);
}
else return i;
}
int output(int m,int n,int a[])//共同的祖先
{
if(a[m]!=a[n])
output(a[m],a[n],a);
else return a[m];
}
void main()
{
ifstream in("input.txt");
if(in.fail())
{
cerr<<"the input is not exist!"<<endl;
return ;
}
ofstream out("output.txt");
int n;
in>>n;
int *a=new int[n+1];
for(int i=0;i<n+1;i++)
a[i]=0;
int b[3];
for(i=0;i<n;i++)
{for(int j=0;j<=2;j++)
in>>b[j];
a[b[1]]=a[b[2]]=b[0];
}
int m,c[2];
int tt;
in>>m;
for(i=0;i<m;i++)
{
in>>c[0];
in>>c[1];
int t=0,t1=0;
t=complect(c[0],a,t);
t1=complect(c[1],a,t1);
if(t<t1)
{
tt=inver(c[1],t,t1,a);
if(c[0]==tt)
out<<c[0]<<' '<<c[1]<<' '<<c[0];
else
out<<c[0]<<' '<<c[1]<<' '<<output(c[0],tt,a);
}
else
{
tt=inver(c[0],t1,t,a);
if(c[1]==tt)
out<<c[0]<<' '<<c[1]<<' '<<c[1];
else out<<c[0]<<' '<<c[1]<<' '<<output(c[1],tt,a);
}
out<<'\n';
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -