1号测试点WA求助
查看原帖
1号测试点WA求助
933414
User_10_noob楼主2024/9/21 18:38

蒟蒻不会LCA()

#include<bits/stdc++.h>
using namespace std;
const int N=115;
inline void read(int &n){
	n=0;char c;
	c=getchar();
	while (c>'9'||c<'0') c=getchar();
	while (c<='9'&&c>='0'){
		n=(n<<1)+(n<<3)+(c^48);
		c=getchar();
	}
}
struct node{//数组模拟二叉树存储,a[i]表示二叉树中的i号节点 
	int data,fa,le,ri,h;
}a[N];
int t[N],vis[N];//vis[i]记录从指定节点到i节点的最短距离 
queue<int>q;
int bfs(int x,int y){//从x到y的最短距离 
	q.push(x);
	vis[x]=0;
	while (!q.empty()){
		int h=q.front();
		q.pop();
		if (a[h].fa&&!vis[a[h].fa]){//对连接自己的所有节点搜索 
			vis[a[h].fa]=vis[h]+2;
			if (a[h].fa==y) return vis[a[h].fa];
			q.push(a[h].fa);
		}
		if (a[h].le&&!vis[a[h].le]){
			vis[a[h].le]=vis[h]+1;
			if (a[h].le==y) return vis[a[h].le];
			q.push(a[h].le);
		}
		if (a[h].ri&&!vis[a[h].ri]){
			vis[a[h].ri]=vis[h]+1;
			if (a[h].ri==y) return vis[a[h].ri];
			q.push(a[h].ri);
		}
	}
}
int main(){
	int n,maxh=1,maxt=1;
	cin>>n;
	a[1].h=1;
	t[1]=1;
	for (int i=1;i<n;i++){
		int u,v;
		read(u);read(v);
		if (!a[u].le) a[u].le=v;
		else a[u].ri=v;
		a[v].fa=u;
		if (!a[u].h){
			a[u].h=a[a[u].fa].h+1;
			t[a[u].h]++;
		}
		if (!a[v].h){
			a[v].h=a[u].h+1;
			t[a[v].h]++;
		}
		int t1=max(a[u].h,a[v].h);//求深度 
		int t2=max(t[a[u].h],t[a[v].h]);//用深度作为桶求宽度 
		maxh=max(t1,maxh);
		maxt=max(t2,maxt);
	}
	printf("%d\n%d\n",maxh,maxt);
	int x,y;
	read(x);read(y);
	cout<<bfs(x,y);
	return 0;
}

2024/9/21 18:38
加载中...