社区讨论
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 条回复,欢迎继续交流。
正在加载回复...