今天早上的题么….还算简单….就是最后一题……要用到斜率优化DP..或者模拟退火…然而这两者我都不会(雾)…只好拿(pian)了15分走人qwq
T1
题意:给你1个村庄中的n个建筑,每个建筑都有一对坐标
(x,y) 。目前,n个建筑都没有网络(大雾)。现在有两种方法让这些村庄连上网:
(1) :给中国移动交宽带费,从中国移动直接向该村庄连一条网络,花费为A。
(2) :向另外一幢有网的建筑,安装共享网线,花费为B×两幢建筑的曼哈顿距离。
现在,问你要将所有建筑都连上网所需要花费的最少的钱(n≤1000)。
画外音:这题其实是个送分题(逃)。
思路&&题解:这题一看就知道(23333),因为数据范围非常小,所以我们可以直接用MST来做。首先,将中国移动设为n+1号点,向1∼n的n个点都连出一条长度为
A 的边。之后两重for循环求出建筑i,j间的曼哈顿距离为disi,j。若B⋅disi,j<A,则在建筑i,j间加入一条B⋅disi,j的边,最后只要跑一下最小生成树就行啦!
T2
简化版题意:给你一条长度为n,左端点为
1 的线段,上面有n个点,第i 个点有一个值a[i],表示由该点延伸出的线段可以覆盖max(0,i−a[i])∼min(n,i+a[i])的地方,求最少用多少条线段可以覆盖原来1∼n的线段。(n≤500000,a[i]≤n)
画外音:这题…有两种做法(逃)。
思路&&题意:这题可以用贪心or线段树的方法去写,我写的方法是贪心。(至于线段树,怎么写就自己想吧qwq)。
贪心解法:将n个点所给出的a[i] 都化成n条线段,之后将它们按左端点排序。设now 为现在可以覆盖到的最右边的端点(初始值为0),之后只用遍历一次,每次只用左端点小于等于now+1 的线段选出一条右端点离now最远的线段,将now更新就行了,重复做直到now=n,最后,while的次数便是我们要的答案。(P.S. 每次while的时候只用从上次遍历的最后一条线段开始遍历就行了,不用从头开始)。
T3
题意:农夫约(FarmerJo)有许多奶牛,并且有(n+1)幢建筑,所有奶牛都被放在这(n+1)幢建筑里,农夫约要做一些防火措施,保障自己和奶牛的安全。这(n+1)幢建筑排成了一排,编号为0∼n,对于0≤i<n,建筑i有
w[i] 头奶牛居住,与建筑(i+1)距离d[i]。建筑n已装有消防栓,现在农夫约决定再给k 幢建筑安装消防栓,以减少安全隐患。
当火灾来临时,所有奶牛都会从所在建筑开始,向大编号方向逃生,直到碰上第一个消防栓为止(如果本来这幢建筑就安装有消防栓,那就不用跑了)。农夫约定了一个隐患值val:所有奶牛逃生距离之和。
农夫约希望隐患值尽可能小,需要你给他设计一种方案。
5%的数据k=0。
另10%的数据k=1。
另55%的数据k=2。
另20%的数据k=3。
另5%的数据k=5。
另5%的数据k=20。
100%的数据n≤1000000。
思路:这题….我刚看到是懵逼的,后来发现这跟CEOI2004那道锯木厂选址很像,就是增加的东西由2改为
题解:出题人讲题时说这题用的是随机化算法——模拟退火来写的,但没想到O(nk)的斜率优化DP也能过,于是这题就有了两种解法,一种是斜率优化DP,一种是模拟退火。(具体怎么做自己想吧..我也还没弄懂QAQ)
=========我是萌萌的分割线QWQ=========
下午..讲了所有网络流的东西,从基础定义到上下界网络流什么的..我从刚开始还听得懂,到后来,越来越懵逼..最终..好像掉线了一段时间(雾),不过重连了(大雾)。(虽然重连了但还是听不懂啊喂qwq)。看来我还得好好学习下各种各样的网络流了。Fighting!!!