题目链接:
题意:
n 台计算机,n-1条边成树,有一个服务器,给定一个 k ,要求所有叶子结点,距离服务器的距离 <=k; 所以要在一些地方放服务器;
问最少要放多少个服务器?
图中要在 4 号结点放一个服务器,k = 2;
分析:
1、无根树要转有根树
从下往上覆盖,设4,肯定要比设5要好,5能覆盖到的,4也能覆盖到,所以在用4来覆盖的时候,要从新建树 <( ̄︶ ̄)>
1 #include2 3 using namespace std; 4 5 const int maxn = 1000 + 10; 6 7 int n,s,k; 8 vector gr[maxn],nodes[maxn]; 9 10 11 int fa[maxn];12 void dfs(int u,int f,int d)13 {14 fa[u] = f;15 int nc = gr[u].size();16 if(nc==1&&d>k) nodes[d].push_back(u);17 for(int i=0; i k; d--)45 {46 for(int i=0; i