题解:CF1830A Copil Copac Draws Trees
树形DP
由于本题的树是一颗有根树,在构建完这颗以
具体地说,如果点
于是可以对输入的每条边记录按顺序编号,然后对图中的每个点进行 DP。
设
若
注意初始化
#define rep(x,y,z) for(int x=y;x<=z;x++)
const int N=2e5+5;
int n;
vector<array<int,2>> E[N];
int f[N];
void dfs(int u,int father,int pre_id){
for(auto t:E[u]){
int v=t[0],id=t[1];
if(v==father) continue;
f[v]=f[u]+(id<pre_id);
dfs(v,u,id);
}
}
void solve(){
cin>>n;
rep(i,1,n) E[i].clear();
rep(i,1,n-1){
int a,b;
cin>>a>>b;
E[a].push_back({b,i});
E[b].push_back({a,i});
}
dfs(1,-1,0);
int ans=0;
rep(i,1,n) ans=max(ans,f[i]);
cout<<ans+1;
}