图片加载可能有点慢,请跳过题面先看题解,谢谢




一道简单的贪心题,而且根节点已经给你了(\(S\)),这就很好做了。
显然,深度小于等于 \(k\) 的都不用管了(\(S\) 深度为0),那么我们只需要处理深度大于 \(k\) 的叶子节点。
这里有一个显而易见的贪心策略:
每次找一个深度最深的没有被覆盖的叶子节点,然后在它的 \(k\) 级祖先上放置服务器,覆盖服务器的周围 \(k\) 层节点。
反复这个操作直到所有节点都被覆盖。

//made by Hero_of_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();
  if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }

bool vis[1010];
int T,n,k,s,ans;
int size[1010],fa[1010],que[1010][1010];
int num,head[1010],nxt[2010],to[2010];
il void add(int u,int v){
   nxt[++num]=head[u];to[num]=v;head[u]=num;
   nxt[++num]=head[v];to[num]=u;head[v]=num;
}

il void dfs(int x,int f,int d){
   size[x]=1;fa[x]=f;
   for(RG int i=head[x];i;i=nxt[i]){
      RG int v=to[i]; if(v==f) continue;
      dfs(v,x,d+1); size[x]+=size[v];
   }
   if(size[x]==1 && d>k) que[d][++que[d][0]]=x;
}

il void init(){
   n=gi(),s=gi(),k=gi(),num=0;
   memset(que,0,sizeof(que));
   memset(vis,0,sizeof(vis));
   memset(head,0,sizeof(head));
   memset(size,0,sizeof(size));
   for(RG int i=1;i<n;i++){
      RG int u=gi(),v=gi();
      add(u,v);
   } dfs(s,0,0);
}

il void Dfs(int x,int f,int d){
   vis[x]=1; if(d>=k) return ;
   for(RG int i=head[x];i;i=nxt[i]){
      RG int v=to[i];
      if(v==f) continue;
      Dfs(v,x,d+1);
   }
}

il void work(){ ans=0;
   for(RG int d=n-1;d>k;d--){
      for(RG int i=1;i<=que[d][0];i++){
         RG int x=que[d][i];
         if(vis[x]) continue;
         RG int cur=x;
         for(RG int j=1;j<=k;j++) cur=fa[cur];
         Dfs(cur,0,0);
         ans++;
      }
   }
   printf("%d\n",ans);
}

int main(){ T=gi(); while(T--){ init(); work(); } return 0; }

[UVALive 3902] Network的更多相关文章

  1. UVALive 3902 Network (树+dfs)

    Consider a tree network with n nodes where the internal nodes correspond to servers and the terminal ...

  2. UVaLive 3902 Network (无根树转有根树,贪心)

    题意:一个树形网络,叶子是客户端,其他的是服务器.现在只有一台服务器提供服务,使得不超k的客户端流畅,但是其他的就不行了, 现在要在其他结点上安装服务器,使得所有的客户端都能流畅,问最少要几台. 析: ...

  3. LA 3902 Network(树上最优化 贪心)

    Network Consider a tree network with n <tex2html_verbatim_mark>nodes where the internal nodes ...

  4. UVALive 3902 网络

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. LA 3902 Network

    人生第一道图论题啊,有木有 题意: 有一个树状网络,有一个原始服务器s,它的服务范围是k 问至少再放多少台服务范围是k的服务器才能使网络中的每个节点都被覆盖掉 解法: 我们以原始服务器为根将其转化成一 ...

  6. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  7. Uva 3902 Network

    题目大意: 在非叶子节点上安装最少的服务器使得,每个叶子节点到服务器的距离不超过k. 贪心+图上的dfs. 先从深度最大的叶子节点开始找.找到父节点后再用这个父节点进行扩充. /* ********* ...

  8. UVALive3902 Network[贪心 DFS&&BFS]

    UVALive - 3902 Network Consider a tree network with n nodes where the internal nodes correspond to s ...

  9. 辣些数据结构的思维题(思维题好难一个都不会TAT)

    洛谷P1268 树的重量 我觉得难点在于把每个叶子节点想象成分出来的叉 然后如果c是a--b这条边上分出来的,可以通过Dab,Dca,Dcb算出分叉边的长度, 长度=(Dac+Dbc-Dab)/2 怎 ...

随机推荐

  1. Unity 实现一个简单的 TPS 相机

    效果如下: 代码如下: public class TPSCamera : MonoBehaviour { /// <summary> /// 目标对象 /// </summary&g ...

  2. jsp标签在JavaScript中使用时,可能会出现的一个问题。

    直接上代码 <script type="text/javascript"> var E = window.wangEditor; var editor = new E( ...

  3. http跳转https方法:百度云如何让http自动跳转到https【免费SSL证书使用FAQ】

    之前的一篇文章已经给大家提供了免费SSL证书的申请方法,这一篇文章是告诉大家在使用免费的SSL证书时可能会遇到的问题[怎么让http自动跳转到https以及http与https同时使用]的解决方法. ...

  4. Paxos共识算法

    Paxos共识算法 paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果.由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程. paxo ...

  5. 使用spring整合Quartz实现—定时器

    使用spring整合Quartz实现—定时器(Maven项目做演示) 不基于特定的基类的方法 一,开发环境以及依赖的jar包 Spring 4.2.6.RELEASE Maven 3.3.9 Jdk ...

  6. IIS 无法加载 CSS,JS的问题

    IIS 能加载 aspx,但不能加载里面的 js,css ,感觉有点坑. 解决方案如下:http://www.pageadmin.net/article/20121001/479.html 原来是没有 ...

  7. export命令详解

    基础命令学习目录首页 export 的基本作用就是将父shell中的局部变量设置为环境变量,使得该变量可以在子shell中使用.下面设置两种情景对export进行原理解析. 情景  1. 有一个名为m ...

  8. 用python实现数字图片识别神经网络--启动网络的自我训练流程,展示网络数字图片识别效果

    上一节,我们完成了网络训练代码的实现,还有一些问题需要做进一步的确认.网络的最终目标是,输入一张手写数字图片后,网络输出该图片对应的数字.由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最 ...

  9. 2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: ...

  10. java(系统)实战1

    在简单学习了java的布局和一些界面的绘制方法后,我便开始有了跟着视频和书本的知识学做一个简单的餐饮系统,才能激发自己的编程和不断巩固知识. 我简单说明一下本次做的系统很普通但具有实用性,是通过jav ...