社区讨论

F求调(玄关)

学术版参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mm6dfqt7
此快照首次捕获于
2026/02/28 21:43
上周
此快照最后确认于
2026/03/03 11:00
上周
查看原帖
Code:
CPP
#include<iostream>
#include<vector>
#define int long long
using namespace std;
const int mod=998244353;
int po2[200006],fa[200006];
int ans=0;
int n,m,k;
int u[200006],v[200006];
vector<int> r[200005];
int dp[200005];
void dfs(int x,int f){
	fa[x]=f;
	for(int i=0;i<r[x].size();i++){
		if(r[x][i]!=f){
			dfs(r[x][i],x);
		}
	}
}
int solve(int x){
	
	if(dp[x]) return dp[x];
	if(r[x].size()>=2) dp[x]=1;
	for(int i=0;i<r[x].size();i++){
		if(r[x][i]!=fa[x]){
			dp[r[x][i]]=solve(r[x][i]);
			if(r[r[x][i]].size()!=2)dp[x]=max(dp[x],dp[r[x][i]]+1);
			 
			
		}
	}
	if(r[x].size()==1){
		dp[x]=0;
		return 0;
	} 
	if(r[x].size()==2){
		dp[x]=1;
	//	cout<<x<<endl;
		return 1;
	}
	return dp[x];
}
signed main(){
	int T;
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=1;i<=n;i++){
			r[i].clear();
		}
		for(int i=1;i<=n-1;i++){
			dp[i]=0;
			fa[i]=0;
			cin>>u[i]>>v[i];
			r[u[i]].push_back(v[i]);
			r[v[i]].push_back(u[i]);
		}
		dp[n]=0;	
		fa[n]=0;
		dfs(1,-1);
		dp[1]=solve(1);
		int anss=0;
		for(int i=1;i<=n;i++){
			anss=max(anss,dp[i]);
	//		cout<<dp[i]<<' ';
		}
		cout<<anss<<endl;
		
	}
	return 0;
}

回复

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

正在加载回复...