题意:
三级标题一棵树,你可以加一些边使根节点1到其他所有点的距离不超过2,问加的最少边数
很显然的是我们每次连的边都是连接根节点的 如果u的儿子v
的深度大于2 我们向u连边
d[v]=2
d[fa]=min(2,d[fa])
d[u]=1
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=200010;
int d[N];
vector<int >g[N];
int ans;
#define pb push_back
void dfs(int u,int fa)
{
int f=0;
for(auto &v:g[u])
{
if(v==fa)continue;
d[v]=d[u]+1;
dfs(v,u);
if(d[v]>2)
{
f=1;
d[u]=1;
d[fa]=min(d[fa],2);
d[v]=2;
}
}
if(f)ans++;
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
int a,b;
cin>>a>>b;
g[a].pb(b);
g[b].pb(a);
}
d[1]=0;
dfs(1,0);
cout<<ans<<endl;
return 0;
}