错误解法,但不知道为什么
查看原帖
错误解法,但不知道为什么
631544
li_cat楼主2024/3/15 12:53

想知道为什么这样做会T掉

#include <bits/stdc++.h>
#define ll long long
#define MAXN 305
using namespace std;
int fa[MAXN];
int h[MAXN];
int n,q;
int high(int x){
	int num=0;
	while(x!=fa[x]){x=fa[x];num++;}
	return num;
}
int LCA(int x,int y){
	if(h[x]<h[y]) swap(x,y);
	while(h[y]<h[x]) y=fa[y];
	if(x==y) return x;
	while(x!=y){
		x=fa[x];
		y=fa[y];
	}
	return x;
}
int main(){
	cin>>n;
	fa[0]=0;
	for(int i=1;i<n;++i){cin>>fa[i];h[i]=high(i);}
	cin>>q;
	for(int i=1;i<=q;++i){
		int num,now,last;
		cin>>num;
		cin>>now;
		for(int i=1;i<num;++i){
			cin>>last;
			now=LCA(now,last);
		}
		cout<<now<<endl;
	}
	return 0;
}
2024/3/15 12:53
加载中...