历 史 遗 留 问 题
查看原帖
历 史 遗 留 问 题
241090
Retucl楼主2020/5/1 14:12
#include<cstdio>
inline int max(int x,int y) {
	return x>y?x:y;
}
struct node {
	int fa,de,vi,ls,rs;
} tr[105];
inline int lca(int x,int y) {
	tr[x].vi=1;
	while(tr[x].fa) {
		tr[tr[x].fa].vi=1;
		x=tr[x].fa;
	}
	while(tr[y].vi!=1)
		y=tr[y].fa;
	return y;
}
int n,sum[105],ms=0;
int main() {
	scanf("%d",&n);
	tr[1].de=1,tr[1].fa=0;
	int max_d=1;
	for(int i=1; i<n; i++) {
		int x,y;
		scanf("%d%d",&x,&y);
		tr[y].fa=x;
		if(!tr[x].ls)
			tr[x].ls=y;
		else
			tr[x].rs=y;
		tr[y].de=tr[x].de+1;
		max_d=max(max_d,tr[y].de);
	}
	int u,v;
	scanf("%d%d",&u,&v);
	int l=lca(u,v);
//	cout<<l<<endl;
	int s1=0,s2=0;
	while(tr[u].fa!=l) {
		u=tr[u].fa;
		s1+=2;
	}
	s1+=2;
	while(tr[v].fa!=l) {
		v=tr[v].fa;
		s2++;
	}
	s2+=1;
	for(int i=1; i<=n; i++)
		sum[tr[i].de]++;
//	for(int i=1;i<=max_d;i++)
//		cout<<sum[i]<<" ";
	for(int i=1; i<=max_d; i++)
		ms=max(ms,sum[i]);
	printf("%d\n%d\n%d",max_d,ms,s1+s2);
	return 0;
}

这为什么会Tle啊

2020/5/1 14:12
加载中...