Description

给你一棵树,现在要建立一些消防站,有以下要求: 1. 消防站要建立在节点上,每个节点可能建立不只一个消防站。 2. 每个节点应该被一个消防站管理,这个消防站不一定建立在该节点上。 3. 每个消防站可以管理至多s个节点。 4. 消防站只能管理距离(两点间最短路径的边数)不超过k的结点。请问至少要设立多少个消防站。

Input

第一行n,s,k。接下来n-1行每行xi,yi描述一条边连接xi与yi。 1<=n<=100000 1<=s<=n 1<=k<=20 1<=xi

Output

一个数,最少的消防站个数。

Sample Input

12 3 1
1 12
3 8
7 8
8 9
2 12
10 12
9 12
4 8
5 8
8 11
6 8

Sample Output

4

HINT

感谢MT大牛贡献译文.

Source

又是树上管理类的问题,我们当然考虑贪心。这个题算是消防站的设立那道题的加强版。

很显然的一种做法是对于一个点,我们要找一个深度最小的点来覆盖它。

然后看这个数据范围k<=20,我们可以想到把他当成状态放进数组里

设need[i][j]为以i为子树的j级子孙有几个未覆盖,left[i][j]为以i为子树的j级子孙有几个多出来控制的没使用

显然当need[i][j]中j=k时,我们就必须放消防站来管理了

然后我们还可以用left来抵消need

总之就是一道很巧妙的贪心题

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define M 100010
 5 #define ll long long
 6 using namespace std;
 7 struct point{
 8     int next,to;
 9 }e[M<<1];
10 int n,m,s,k,num;
11 int head[M],fa[M];
12 ll tot,ans;
13 ll need[M][21],lef[M][21];
14 void add(int from,int to)
15 {
16     e[++num].next=head[from];
17     e[num].to=to;
18     head[from]=num;
19 }
20 void dfs(int x,int f)
21 {
22     fa[x]=f; need[x][0]=1;
23     for(int i=head[x];i;i=e[i].next)
24     {
25         int to=e[i].to;
26         if(to==fa[x]) continue;
27         dfs(to,x);
28         for(int j=1;j<=k;j++) need[x][j]+=need[to][j-1];
29         for(int j=k-1;j>=0;j--) lef[x][j]+=lef[to][j+1];
30     }
31     ll tmp=(need[x][k]+s-1)/s;
32     ans+=tmp;
33     lef[x][k]+=(ll)tmp*s;
34     for(int i=0;i<=k;i++)
35     {
36         if(lef[x][i])
37         {
38             for(int j=i;j>=0&&(j>=i-1||x==1);j--)
39             {
40                 if(lef[x][i]<=need[x][j])
41                 {
42                     need[x][j]-=lef[x][i];
43                     lef[x][i]=0;
44                     break;
45                 }
46                 lef[x][i]-=need[x][j];
47                 need[x][j]=0;
48             }
49         }
50     }
51 }
52 int main()
53 {
54     scanf("%d%d%d",&n,&s,&k);
55     for(int i=1;i<n;i++)
56     {
57         int x,y; scanf("%d%d",&x,&y);
58         add(x,y); add(y,x);
59     }
60     dfs(1,0);
61     for(int i=0;i<=k;i++) tot+=need[1][i];
62     ans+=(tot+s-1)/s;
63     printf("%lld",ans);
64     return 0;
65 }

转载于:https://www.cnblogs.com/Slrslr/p/9410505.html

[BZOJ1117]救火站gas相关推荐

  1. BZOJ1117 [POI2009]救火站Gas 贪心

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ1117.html 题目传送门 - BZOJ1117 题意 给你一棵树,现在要建立一些消防站,有以下要求: ...

  2. LeetCode Gas Station(双指针 )

    问题:给出n个汽油站,以及相邻两站需要消耗的汽油,问可以走一圈时汽油站的下标 思路:用start,end标记起点站和终点站,当汽油剩余量大于等于0时,说明可以进入下一站,如果与起点站相遇,说明可以走一 ...

  3. B站就机房服务器故障道歉;罗永浩否认将启动自动驾驶项目;​亚马逊收购 Facebook 卫星互联网团队|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  4. Gas Station (环形加油站)

    题目:有n个加油站首尾相连成一个圆,已知每个加油站的油量,以及从第i个加油站到第i+1个加油站需消耗的油量,问:能否开车从某个加油站出发,循环一圈又回到起点,如果可以返回出发的起点(车的邮箱容量是无限 ...

  5. 计算机安全意识小故事,求一篇关于消防救火的事迹,消防安全小故事

    1.一个夏天的晚上,我经不住蚊子"热情"的叮咬,便点了一盘蚊香放在床旁.当我睡得正香的时候,掉下来的床单不知不觉中已被蚊香点着了,浓烈的烟味把我呛醒,我看到了眼前的这一幕,顿时惊慌 ...

  6. 亚马逊英国站小风扇UKCA认证办理流程

    小风扇上架亚马逊英国站需要提交UKCA认证,随着近期英国热浪来袭,高温不下,小风扇成为炙手可热的商品,出口量激增. 2023年1月1起投放到英国市场的产品必须使用UKCA标志,在此之前,品牌商仍然可以 ...

  7. 钱包的下一站:无私钥、不用再抄助记词

    下一个流量浪潮何时会来? 文 | 昕楠  运营 | 盖遥  编辑 | Mandy王梦蝶 出品 | Odaily星球日报(ID:o-daily) 特别感谢 MYKEY 研究员姚翔(沙漏时间).ZenGo ...

  8. YOUChain全球节点招募马来西亚吉隆坡站圆满完成

    YOUChain全球节点招募马来西亚吉隆坡站圆满完成 2019年9月29日下午14:00,由YOUChain.YOU财经主办,AICC天使链官方运营方:天吏国际集团.Angelic Alliance天 ...

  9. Gas Station 加油站

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

最新文章

  1. mysql锁机制总结
  2. 这个Nature推荐的代码海洋竟然有文章作者上传的所有可重现性脚本,涉及单细胞、微生物组、转录组分析、机器学习等相关
  3. 开发之没沟通误删客户数据库数据之找数据路
  4. PTA|团体程序设计天梯赛-练习集|JAVA版
  5. cameraLink
  6. c语言实现费诺编码csdn,香农编码 哈夫曼编码 费诺编码的比较
  7. vue项目退出登录清除 store 数据
  8. HDU - 3533 Escape
  9. Line Phone概念手机的设计感悟
  10. Android触摸屏失效后的操作方法
  11. input 表单的type属性
  12. 外设驱动库开发笔记40:AT25xxx外部存储器驱动
  13. 升级WIN11后必做的优化,解决卡顿问题
  14. 《大腕》对白之各类搞笑版
  15. ORB2单目读代码笔记5--利用灰度质心计算ORB特征点方向,实现旋转不变性
  16. 回车换行问题0x0D和0x0A
  17. java—— 图片转字符串、字符串转图片、java Base64用法
  18. DIP数字图像处理笔记
  19. 吃透阿里P8推荐424页Java服务端研发知识图谱后,直接入职蚂蚁P6
  20. ICO:如何监管法外之地?

热门文章

  1. python 数据可视化———绘制饼状图(bar)
  2. 华清星创客学员承载梦想嗨翻青春
  3. Ajax,AjaxPro说明
  4. 超详细新手建站方法说明(让你少走弯路)
  5. CakePHP 2.x CookBook 中文版 第七章 模型 之 删除数据
  6. 《物质世界 (Outward)》证明不必压缩制作大型角色扮演游戏的时间
  7. linux ubuntu配置ip地址命令,Ubuntu系统下配置IP地址方法介绍
  8. python logger.exception_Python logging设置和logger解析
  9. linux ubunto全键盘 手机,全键盘设计,XDA打造运行LineageOS和Ubuntu Touch OS的手机
  10. linux查看网关gateway