先来LCA的:
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn=200000+10; 7 struct Tedge{ int x,y,next;}adj[maxn*2];int fch[maxn],ms=0; 8 void AddEdge(int u,int v){ 9 adj[++ms]=(Tedge){u,v,fch[u]};fch[u]=ms; adj[++ms]=(Tedge){v,u,fch[v]};fch[v]=ms; return;10 }11 int s[maxn],top[maxn],fa[maxn],son[maxn],dep[maxn],n,m;12 void First_DFS(int x){13 dep[x]=dep[fa[x]]+1;s[x]=1;14 for(int i=fch[x];i;i=adj[i].next){15 int v=adj[i].y;if(v==fa[x]) continue;16 fa[v]=x;First_DFS(v);17 if(s[son[x]] =0;i--) putchar(buf[i]+'0');return;48 }49 void init(){50 n=read();m=read();for(int i=2;i<=n;i++) AddEdge(read(),read());51 First_DFS(1);Second_DFS(1,1);return;52 }53 void work(){54 int a,b,c,d[3];55 while(m--){56 a=read();b=read();c=read();57 d[0]=dist(a,b);d[1]=dist(b,c);d[2]=dist(a,c);58 sort(d,d+3);write(d[1]);putchar('\n');59 } return;60 }61 void print(){62 return;63 }64 int main(){65 init(); work(); print(); return 0;66 }