第一道LCA
#include
<
stdio.h
>
#include < string .h >
#define N 10001
int unionset[N],visit[N];
int main()
{
int T,n,a,b,i;
scanf( " %d " , & T);
while (T -- )
{
scanf( " %d " , & n);
for (i = 1 ;i <= n;i ++ ) // init it
{
unionset[i] = i;
visit[i] = 0 ;
}
for (i = 1 ;i < n;i ++ )
{
scanf( " %d%d " , & a, & b);
unionset[b] = a;
}
scanf( " %d%d " , & a, & b);
/* find the root */
visit[a] = 1 ;
a = unionset[a];
while (a != unionset[a])
{
a = unionset[a];
visit[a] = 1 ;
}
while (b != unionset[b])
{
if (visit[b]) break ;
b = unionset[b];
}
printf( " %d\n " ,b);
}
return 0 ;
}
#include < string .h >
#define N 10001
int unionset[N],visit[N];
int main()
{
int T,n,a,b,i;
scanf( " %d " , & T);
while (T -- )
{
scanf( " %d " , & n);
for (i = 1 ;i <= n;i ++ ) // init it
{
unionset[i] = i;
visit[i] = 0 ;
}
for (i = 1 ;i < n;i ++ )
{
scanf( " %d%d " , & a, & b);
unionset[b] = a;
}
scanf( " %d%d " , & a, & b);
/* find the root */
visit[a] = 1 ;
a = unionset[a];
while (a != unionset[a])
{
a = unionset[a];
visit[a] = 1 ;
}
while (b != unionset[b])
{
if (visit[b]) break ;
b = unionset[b];
}
printf( " %d\n " ,b);
}
return 0 ;
}