社区讨论

wa#11求解

P3884[JLOI2009] 二叉树问题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@ly2nh2vx
此快照首次捕获于
2024/07/01 15:20
2 年前
此快照最后确认于
2024/07/01 17:26
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
int ansu,ansv;
int tx,ty;
int cnt[1001];
vector<int>dis[1001];
struct node{
	int fa,deep;
}t[1001];
void dfs(int root){
	for(int i=0;i<dis[root].size();i++){
		int k=dis[root][i];
		if(k==t[root].fa)continue;
		t[k].fa=root;
		t[k].deep=t[root].deep+1;
		dfs(k);
	}
}
void getLCA(int u,int v){
	if(t[u].deep<t[v].deep)swap(u,v);
	while(t[u].deep!=t[v].deep){
		u=t[u].fa;
		ansu++;
	}
	while(u!=v){
		u=t[u].fa;
		v=t[v].fa;
		ansu++;
		ansv++;
	}
}
int main(){
	cin>>n;
	memset(cnt,0,sizeof(cnt)); 
	t[1].fa=0;
	t[1].deep=1;
    for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		dis[u].push_back(v);
		dis[v].push_back(u);
	}
	cin>>tx>>ty;
	dfs(1);
	int max1=-1;
	for(int i=1;i<n;i++){
		if(max1<t[i].deep)max1=t[i].deep;
		cnt[t[i].deep]++;
	}
	int max2=-1;
	for(int i=1;i<=n;i++){
		if(max2<cnt[i])max2=cnt[i];
	}
	cout<<max1<<"\n"<<max2<<endl;
	getLCA(tx,ty);
	if(t[tx].deep<t[ty].deep)cout<<ansv*2+ansu<<endl;
	else cout<<ansu*2+ansv<<endl;
	return 0; 
} 

回复

0 条回复,欢迎继续交流。

正在加载回复...