题意:

     给你一棵树,所有叶子节点都是客户端,其他的都是服务器,然后问你最少在多少个服务器上安装VOD能使所有的客户端都能流畅的看视频,流畅看视频的条件是每个客户端距离他最近的安装VOD的服务器的距离不能超过k,而且题目已经给你在一个服务器上安装好了VOD。

思路:

     自己没想出来,说下白书上的思路,第一个就是说当遇到无根树的时候,一般情况下把无根树变成有根数会有利于问题的解决,然后这个题目就是把给定的VOD服务器变成了树根,然后我们可以根据贪心策略,先处理深度最深的,安装VOD是在当前深度最深的上面第k个父亲那安装VOD这样是为了尽可能多的去让别的客户端能用上这个VOD,然后就是模拟这个过程了,这个思路是白书上说的,我想了一阵子,只是感觉有道理,但并不能肯定他的正确性,说白了就是还没弄清楚这样为什么是对的,以后会重新编辑这篇博客。

     

#include<stdio.h>

#include<string.h>

#define N 1000+5

#define N_node 1000 + 5

#define N_edge 2000 + 10

typedef struct

{

   int to ,next;

}STAR;

STAR E[N_edge];

int list[N_node] ,tot;

int mark[N] ,mk[N] ,deep[N];

int dis[N][N] ,mer[N];

void add(int a ,int b)

{

   E[++tot].to = b;

   E[tot].next = list[a];

   list[a] = tot;

}

//deep mark

void DFS1(int s ,int fa)

{

   int mk = 0;

   for(int k = list[s] ;k ;k = E[k].next)

   {

       int to = E[k].to;

       if(to == fa) continue;

       mk = 1;

       mer[to] = s;

       deep[to] = deep[s] + 1;

       DFS1(to ,s);

   }

   mark[s] = !mk;

}

//dis

void DFS2(int sss ,int now ,int s ,int fa)

{

    for(int k = list[s] ;k ;k = E[k].next)

    {

        int to = E[k].to;

        if(to == fa) continue;

        dis[sss][to] = now;

        DFS2(sss ,now + 1 ,to ,s);

    }

}

int main ()

{

    int n ,s ,k ,i ,j ,t ,a ,b;

    scanf("%d" ,&t);

    while(t--)

    {

        scanf("%d %d %d" ,&n ,&s ,&k);

        memset(list ,0 ,sizeof(list)) ,tot = 1;

        for(i = 1 ;i < n ;i ++)

        {

            scanf("%d %d" ,&a ,&b);

            add(a ,b) ,add(b ,a);

        }

        for(i = 1 ;i <= n ;i ++) mer[i] = i;

        deep[s] = 0;

        DFS1(s ,-1);

        for(i = 1 ;i <= n ;i ++)

        {

           dis[i][i] = 0;

           DFS2(i ,1 ,i ,-1);

        }

         

        memset(mk ,0 ,sizeof(mk));

        for(i = 1 ;i <= n ;i ++)

        if(mark[i] && dis[s][i] <= k) 

        mk[i] = 1;

        int Ans = 0;

        while(1)

        {

            int mkid = 0 ,maxdeep = 0;

            for(i = 1 ;i <= n ;i ++)

            {

                if(!mark[i] || mk[i]) continue;

                if(maxdeep < deep[i])

                maxdeep = deep[i] ,mkid = i;

            }

            if(!mkid) break;        

            Ans ++;

            int maxdis = 0 ,mknode = 0;

            mknode = mkid;

            for(i = 1 ;i <= k ;i ++)

            mknode = mer[mknode];

            for(i = 1 ;i <= n ;i ++)

            {

                if(!mark[i] || mk[i]) continue;

                if(dis[mknode][i] <= k) mk[i] = 1;

            }

        }

        printf("%d\n" ,Ans);

    }

    return 0;

}    

        

           

            

        

LA3902网络的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  3. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  4. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

  5. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  6. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  7. C# 利用性能计数器监控网络状态

    本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...

  8. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  9. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

随机推荐

  1. Reactive Spring实战 -- WebFlux使用教程

    WebFlux是Spring 5提供的响应式Web应用框架. 它是完全非阻塞的,可以在Netty,Undertow和Servlet 3.1+等非阻塞服务器上运行. 本文主要介绍WebFlux的使用. ...

  2. SQL练习——LeetCode解题和总结(2)

    602. Friend Requests II: Who Has the Most Friends[M] 一.表信息 In social network like Facebook or Twitte ...

  3. 2019 GDUT Rating Contest II : A. Taming the Herd

    题面: A. Taming the Herd Input file: standard input Output file: standard output Time limit: 1 second Me ...

  4. HDU_5414 CRB and String 【字符串】

    一.题目 CRB and String 二.分析 对于这题,读懂题意非常重要. 题目的意思是在$s$的基础上,按题目中所描述的步骤,即在$s$中任意选择一个字符$c$,在这个字符后面添加一个不等于$c ...

  5. Flutter资源

    目录 文章 一开始 HOWTO文档 网站/博客 高级 视频 组件 演示 UI 材料设计 图片 地图 图表 导航 验证 文字和富文本 分析.流量统计 自动构建 风格样式 媒体 音频 视频 语音 存储 获 ...

  6. Springboot项目启动后自动创建多表关联的数据库与表的方案

    文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...

  7. 《逆向工程核心原理》——TLS回调函数

    pe中TLS(thread local storage)中函数的执行时机早于入口函数(entry point), 相关结构: // // Thread Local Storage // typedef ...

  8. java例题_44 一个偶数总能表示为两个素数之和

    1 /*44 [程序 44 偶数的素数和] 2 题目:一个偶数总能表示为两个素数之和. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个偶数(大于2的偶数,因为1不是素数) 7 * 2.用for ...

  9. Redis 6.1 redis-cluster-proxy 实践说明

    背景 ​ Redis3.0版本之后开始支持了Redis Cluster,Redis也开始有了分布式缓存的概念.关于Redis Cluster的相关说明,可以看之前的几篇文章:Redis Cluster ...

  10. 移动文件--mv

    mv file  srcpath 将文件移动到指定目录下 mv dir srcpath  将文件移动到指定目录下