最大值最小与最小值最大问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在直线上有a个瓶盖,现在从这些瓶盖里找出B个,使得距离最 近的2个距离最大,最大可以到多少呢? A<=1e5
Luogu 1316
二分这个最大值,然后扫一遍,选择一个瓶盖之后选择下一个 距离超过mid的瓶盖(贪心) 如果选择的瓶盖个数超过b就可行。
Noip2012 借教室
对于100%的数据,有1≤n,m≤1e6,0≤ri,dj≤1e9
二分答案,这样有很多个以怪兽为中心的正方形是不能走的,所以bfs把这些 点标记出来。
用并查集维护(1,1)到(n,m)的连通性。
蚂蚁运输
蚂蚁想要积攒一些货物来过冬。积攒货物的方法是这样的。 对于第 i 只蚂蚁,它要从 li出发,拿起货物,走到 ri处放下货物,需要消耗的时间为 |ri-li|。 而且所有蚂蚁都是可以同时进行的,也就是说,假如有 m 只蚂蚁,那么运输完货物 的时间为 max{|ri-li|}。 LYK 决定帮蚂蚁一把,它发明了空间传输装置。具体地,当蚂蚁走到 X 处时,它可 以不耗费任意时间的情况下瞬间到达 Y,或者从 Y 到达 X。也就是说,一个蚂蚁如 果使用了空间传输装置,它耗费的时间将会是 min{|li-X|+|ri-Y|,|li-Y|+|ri-X|},当然 蚂蚁也可以选择徒步走到目标点。 由于空间传输装置非常昂贵, LYK 打算只建造这么一台机器。并且 LYK 想让蚂蚁运 输完货物的时间尽可能短,你能帮帮它吗? n,m<=1000000 li<ri
通过这个性质,我们可以把一些在树上求最小值最大和最大值最小的问题转
化为最小生成树。
02
travel
题意:给出一个图,t个询问,求出每个询问两个点的路径使得路径上边权的 最大值最小
02
travel
题意:给出一个图,t个询问,求出每个询问两个点的路径使得路径上边权的 最大值最小 最简单的暴力:Dfs
最大值最小/最小值最大问题
1.二分答案 2.最小生成树 3.???
Qdez thc
Part1 二分答案
NOIP2015 day2T1
先来一道例题:跳石头
二分答案
我们既然想让最小值最大,就可以假设一个答案,判断他是否满足要求(是否是最小值),如 果满足就看看答案能否变得更大,否则看看答案小一些是否满足条件。
• 不一定所有的最小值最大/最大值最小都是以上三种情况。
• 例如国王游戏是贪心
• 但是看到这些关键字的时候起码要有个二分/最小生成树的想法。
thanks
这样就可以在O(n)(n,m同阶)的时间内判断x<li时是否可行。 X>li同理。
二分答案:分数规划
有这样一类题目,要求平均值最大/最小 可以二分这个平均值,然后推一下平均值的式子。
bzoj1486
• 给出一张图,边有边权,求出一个平均权值最小的环。 • 点数3000,边数10000
bzoj1486
包裹快递
• 一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先 设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏 一个地点。小K得到每个地方可以签收的时间段,并且也知道路线中一个地 方到下一个地方的距离。若到达某一个地方的时间早于可以签收的时间段, 则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签 收的过程是瞬间完成的。
暴力的做法: 用数组记录每天剩余的教师数量,直接模拟
O(nm)
Noip2012 借教室
• N,M = 1000000? • 直观优化方法 • 线段树维护每天剩余教室数 • 区间一起减一个数 O(M) O(logM) • O(NlogM) • 常数写得小才能过
Noip2012 借教室
• 如果前k个订单教室够用,则前k-1个订单教室也一定够用 • 二分k,判断前k个订单教室是否够用 • 如何快速知道前k个订单中每天的教室被用了几间?
luogu1991
luogu1991
直接跑kruskal,最大的s-1条边使用卫星通讯。
Part3 ???
02
travel
一个树由 n 个点, n - 1 条边组成,结点编号为 1到n。树上任意两个点 之间路径唯一。 定义一个点到一条路径的距离为:该点到路径上最近的一个点需要经过 的边的数量。 现在想知道怎样选两个点确定一条路径,使得距离这个路径最远的点尽 量近。要求你输出距离路径最远的点距离路径的距离。
• 为了节省燃料,小K希望在全部送达的情况下,车的最大速度越小越好,就 找到了你给他设计一种方案,并求出车的最大速度最小是多少。 • N<=1e5
包裹快递
Fra Baidu bibliotek
• 求车的最大速度最小是多少 • 车一定始终以最大速度行驶 • 二分最大速度后,模拟运送的过程,判断是否能全部按时签收
Noip2012 借教室
会的同学先不要说出正解。
02
travel
正解:求出树的直径即可。
证明:
图中假如a到b是答案,那么改成a到c会更优,而a到c就是直径。
HackerRank TreeCoordinates
题意:给出一棵树和m个点对(xi,yi),求两个点对(a,b)和(c,d),使得 dis(a,c)+dis(b,d)最大。
HackerRank TreeCoordinates
题意:给出一棵树和m个点对(xi,yi),求两个点对(a,b)和(c,d),使得 dis(a,c)+dis(b,d)最大。
可以发现这是个二维问题,我们可以考虑枚举一维。 看看答案的计算公式是什么 dis(a,c)+dis(b,d)=dep[a]+dep[c]−2∗dep[lca(a,c)]+dep[b]+dep[d]−2∗de p[lca(b,d)]
Noip2012 借教室
• 如果前k个订单教室够用,则前k-1个订单教室也一定够用 • 二分k,判断前k个订单教室是否够用 • 如何快速知道前k个订单中每天的教室被用了几间? • 区间加可以使用差分+前缀和。
兔子
• 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更 特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有 1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条 边的无向连通图,而度数大于2的点至多有1个。 • 兔子们决定把其中K个兔子窝扩建成临时避难所。当危险来临时,每只兔子均会同 时前往距离它最近的避难所躲避,路程中花费的时间在数值上等于经过的路径条数 。为了在最短的时间内让所有兔子脱离危险,请你安排一种建造避难所的方式,使 最后一只到达避难所的兔子所花费的时间尽量少。 • 对于30%的数据,N≤15,K≤4; • 对于60%的数据,N≤100; • 对于100%的数据,1≤K≤N≤1,000,1≤M≤1,500
• 考虑二分这个mid,问题变成判断是否存在一个环,平均值小于等于mid • 把平均值用边权和/边数表示,大家推一下式子。
bzoj1486
bzoj1486
• 所以把每条边的边权都减去mid,然后判断是否存在负环即可。 • Spfa判负环
Part2 最小生成树
MST
最小生成树又叫最小瓶颈生成树,意为树上的最大边最小。
兔子
• 对于30%的数据,N≤15,K≤4 • 枚举避难所的位置,求出其它兔子窝离它们最近的避难所的距离
兔子
兔子
• 求到达时间最晚的兔子的最早到达时间 • 二分答案X,求解至少建几个避难所,使得每个兔窝在距离X的范围内至少有一个 避难所 • 枚举住在“根”的兔子去往的避难所的位置,记为A • 令与A距离不超过X的兔子都前往A • 剩下的兔窝被分成若干条链,容易计算最少需要建立几个避难所 • 判断总数是否超过K个
正确性:如果存在一种方法使得最小间距 > k,则一定存在一种方法使得最小间距 > k-1
二分答案
如何判断是否存在一种方案,移走不超过M个石头,使得剩下的石头最大间距 ≥ k? k=3 石头位置: 1 3 5 8 ……
从左向右扫描,发现间隔不足k就移除一个石头 判断移走的石头数是否大于M
O(N)
Luogu 1316
实现细节:
http://note.youdao.com/noteshare?id=23e9a9048ffd6c5df084eed7326 f012e&sub=6BDDEC59A5A44E2D8428614B48AEC9F1
Noip2012 国王游戏
1 ≤ n ≤1,000
Noip2012 国王游戏
HackerRank TreeCoordinates
我们考虑枚举a和c的lca。这样公式中dep[lca(a,c)]就是确定的了。
公式中还有dep[a],dep[c],dis(b,d)没有计算。 如果没有前两个,就相当于求最大的dis(b,d),这就是直径。
HackerRank TreeCoordinates
二分答案,转化为判定性问题。 首先,可以忽略所有的li-ri<mid的点
剩下的点一定是从l走到x,再从y走到r。
然后发现,我们要同时考虑x和y的选择,这样不好考虑,所以固定一维,也就是枚 举x
首先假设x<li,然后使得x不断左移。
当确定了x之后,y可行的取值是在一段区间之内,所以当x左移的同时,y的可行区 间在不断合拢。同时满足x<li的个数又在不断增加。
HackerRank TreeCoordinates
题意:给出一棵树和m个点对(xi,yi),求两个点对(a,b)和(c,d),使得 dis(a,c)+dis(b,d)最大。
可以发现这是个二维问题,我们可以考虑枚举一维。 看看答案的计算公式是什么 dis(a,c)+dis(b,d)=dep[a]+dep[c]−2∗dep[lca(a,c)]+dep[b]+dep[d]−2∗de p[lca(b,d)]
hzr 陷进了一个迷宫!这个迷宫是网格图形状的。 hzr 一开始在(1,1)位置, 出口在(n,m)。 而且这个迷宫里有很多怪兽,若第 a 行第 b 列有一个怪兽,且此时 hzr 处于 第 c 行 d 列,此 时这个怪兽对它的威胁程度为|a-c|+|b-d|。 hzr 想找到一条路径,使得它能从(1,1)到达(n,m),且在途中对它威胁程度最 小的怪兽的 威胁程度尽可能大。 当然若起点或者终点处有怪兽时,无论路径长什么样,威胁程度最小的怪兽 始终=0。 n,m<=1000
02
正解:
travel
可以发现最终的所有路径一定在最小生成树上。
问题转化为求树上两点路径上边权的最大值。
树上倍增即可。 fa[x][i]=fa[fa[x][i-1]][i-1]; maxx[x][i]=max(maxx[x][i-1],maxx[fa[x][i-1]][i-1]); 复杂度O(nlogn)
• 2.将两个树合并,则新的树的直径的两个端点一定是原来两棵树 的四个直径端点中的两个。
• 3.任意两条直径的交集不为空。 • 4.选一条路径,使得树上距离路径最远点的距离最小,这条路径是直径。 • 所以可以在O(1)的时间内合并两个子树的直径。
HackerRank TreeCoordinates
但是可以把dis[a],dis[c]合成到直径上。
重新定义两点的距离为他们在树上的距离+dis[a]+dis[c] 这依然满足树的直径的所有性质。
HackerRank TreeCoordinates
树的直径的性质: • 1.直径x,y上点p处任意一条支链的长度len小于等于min(dis(x,p),dis(p,y)) 。
相关文档
最新文档