题意:

     给你一棵树,所有叶子节点都是客户端,其他的都是服务器,然后问你最少在多少个服务器上安装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. jq日期与时间戳互相转换

    方法1:$.extend({ myTime: { CurTime: function () { return Date.parse(new Date()) / 1000; }, DateToUnix: ...

  2. free命令查看内存

    [root@jojo ~]# free -h total used free shared buff/cache available Mem: 991M 273M 64M 1.1M 653M 535M ...

  3. 第十届蓝桥杯省赛-试题E: RSA 解密

    试题E: RSA 解密 这里涉及到很多数论的知识:质因子分解,扩展欧几里得算法,快速幂算法,利用快速乘算法求解快速幂(mod太大导致不能直接乘,而是需要使用加法来替代乘法) 另外还需要注意扩展欧几里得 ...

  4. GNS3通过“云”连接到虚拟机实验

    GNS3通过"云"连接到虚拟机实验并使用wireshark工具对数据分析 观看本文之前注意!!!!! 做这次实验,我所遇到的问题,会全部写在文章结尾,如果读者们遇到问题,可查看. ...

  5. 统一Java环境变量配置,Java环境如何配置?

    一 JDK下载和安装 Java开发工具包统一下载地址:https://www.hiai.top/archives/268.html 二 java环境变量配置 1.变量名:JAVA_HOME 变量值:你 ...

  6. kali msf6 更新及bug处理

    问题描述 Metasploit 漏洞库更新,利用msfupdate命令更新,出现已停止该命令更新,出现如下提示: 利用一句话安装更新,命令如下,安装过程中有部分警告出现 curl https://ra ...

  7. Protobuf在Cmake中的正确使用

    Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据格式.例如,在深度学习中常用的ONNX交换模型就是使用.pr ...

  8. rest framework ViewSet

    ViewSets 路由选择确定要用于一个请求哪个控制器之后,控制器负责做出请求的感并产生相应的输出. - Ruby on Rails的文档 Django的REST框架允许你的逻辑一组在一个类中的相关意 ...

  9. 简单3步快速生成千万级别mysql测试数据库,模拟电商数据

    https://blog.csdn.net/wuda0112/article/details/88387735 github项目地址:https://github.com/wuda0112/mysql ...

  10. 如何使用jQuery $.post() 方法实现前后台数据传递

    基础方法为 $.post(URL,data,callback); 参数介绍: 1.URL 参数规定您希望请求的 URL. 2.data 参数规定连同请求发送的数据. 3.callback 参数是请求成 ...