正确的
for(int i=1;i<=n;i++)
dp[i][1]=e[i].size();
dfs(1);
ans=dp[1][p];
for(int i=2;i<=n;i++)
if(dp[i][p]<ans) ans=dp[i][p]+1;
cout<<ans;
错误的
for(int i=1;i<=n;i++)
dp[i][1]=e[i].size();
dfs(1);
for(int i=2;i<=n;i++)
dp[1][p]=min(dp[1][p],dp[i][p]);
cout<<dp[1][p];
原因:除 1 以外的点都需要与它的父亲断开,ans++。