华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1927|回复: 2
打印 上一主题 下一主题

Byte大陆( byteland)

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2021-10-15 21:39:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【题目描述】
   Byte大陆上的王国由一些城市组成,还有一些公路,公路是双向通行的。在某些城市中有堡垒(共有C),是国王的部队住所。
  当一个城市受到攻击时,国王的军队就会从最近的堡垒从公路上赶来。狡猾的敌人每次会向距离最近的堡垒最远的城市攻击,这让国王大为烦恼。国王打算投资新增加K个堡垒,请你设计一个方案,在某些城市修建新堡垒,使得敌人攻击时,军队能最快到达,即受攻击的城市与最近的堡垒的距离尽可能小,并计算出这个最小距离值。
城市和道路的设计比较独特(见输入说明),N个城市有N个道路,甚至有连接自己城市的道路(参见样例2)。数据保证可以有设计方案,使得每个城市都可以通过公路连接到一个堡垒或它自身就有堡垒。
【输入格式】
第一行,三个整数 N K C。表示有N个城市,标号从0到N-1。新增加K个堡垒;已经在C个城市有堡垒。
第二行,N个整数,第i个整数road(i)表示:第i条公路是连接i城市和road(i)城市的。
第三行,N个整数,第i个整数distance(i)表示:第i条公路的长度。
第三行,C个不同的整数,第i个整数castle(i)表示:在castle(i)城市有堡垒。
【输出格式】
只一行,一个整数。可能的最小距离。

【输入输出样例】
  
输入
  
5   1  0
1   2  3  4  0
1   1  1  1  1
  
10   3  3
0    2  0  0   2  2  8   3  8  7
10   9  1  8   1  3  7   2  8  1
3   4  6
输出
2
3
【数据范围】
30%数据 2 <= N <= 5
50%数据 2 <= N<= 20
100%数据2 <= N <= 50
1<= K <= N
0<= C <= N-K
1<=公路长度 <=10^6

回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
板凳
 楼主| 发表于 2021-10-16 16:28:19 | 只看该作者

| 测试点编号 | $\max a_i$  |  $q$   |
| :--------: | :---------: | :----: |
|  $1\sim2$  |  $\leq 10$  |  $2$   |
|  $3\sim4$  | $\leq 10^4$ |  $1$   |
|  $5\sim6$  | $\leq 10^7$ |  $1$   |
| $7\sim 8$  | $\leq 10^3$ | $10^3$ |
| $9\sim10$  | $\leq 10^5$ | $10^3$ |
| $11\sim12$ | $\leq 10^7$ | $10^3$ |
| $13\sim14$ | $\leq 10^5$ | $10^5$ |
| $15\sim16$ | $\leq 10^7$ | $10^5$ |
| $17\sim18$ | $\leq 10^5$ | $10^7$ |
| $19\sim20$ | $\leq 10^7$ | $10^7$ |
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
沙发
 楼主| 发表于 2021-10-15 21:56:15 | 只看该作者
首先二分答案,对于这个答案,我们设法求出这些带环树的最少需要设的城堡数。
我们先考虑没有环的情况,对于一棵树,从叶子结点开始做,记录该节点以下的一棵子树需要多长距离以内要有一座城堡need以及该子树中的城堡可以提供给外面多长距离以内的影响offer。我们贪心地认为,城堡要尽量建在靠上层的位置,下面的能不建就先不建。
1、如果当前子树的offer可以满足当前子树的need,那么当前子树就不存在need了。        2、如果当前子树的need加上与父亲连边的那条权值已经超过了当前二分出来的答案,那么当前节点必须设城堡。
3、用当前子树的need和offer去更新父亲结点的need和offer。
这样一直贪心上去就能得到最少的城堡数。

现在在一棵树上加一个环,我们可以证明这个环上至少有一条边是不需要用到的。假设是由环上的某个点(其可能连向某个城堡)出发从而达到环上的其他点,显然不是环上的每条边都要用一边的,因为不可能更新别人的点,后来反而还更新了自己。
然而我们不知道到底是哪条边不用的时候最优,因此我们需要枚举删掉环上的哪条边,破环成树,然后就按照上面的方法即可。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 02:07 , Processed in 0.730557 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表