手动博客搬家: 本文发表于20180929 15:18:55, 原地址https://blog.csdn.net/suncongbo/article/details/82897992

最近做到了两道(我感觉)思路比较神的题,总结一下。
注:以下两道题我都没有用文中所述方法A过。

1. bzoj 2654

首先如果直接求MST,不能保证有恰好\(K\)条白边。
而贪心显然是错的。
可以这样想:如果题目里要求是恰好有\(0\)条白边,我们可以让所有白边的代价增加\(+\inf\). 如果要求白边最多,可以让白边代价增加\(-\inf\). 那既然这样的话,MST中白边的数量一定随着给白边增加的权值单调。因此可以二分,直到有\(K\)条白边即可。最后答案减去\(K\times 增加的权值\).
好神啊www %%%cls
这道题非常重要,希望自己永远也不要忘记这道题。

2. bzoj 3675

正解是斜率优化dp. 但这不是本文的重点。
如果只是斜率优化不搞点有意思的新东西也太无聊了吧!23333
从网上看到的神做法:
首先\(dp\)还是要的:假设\(dp[i]\)表示序列前\(i\)个数分割成若干段的最大得分,则枚举最外层的一次划分\(dp[i]=\max^{i}_{j=1} (s[i]-s[j])s[j]\), \(s[j]\)为权值的前缀和。但是这样无法保证最优解能分成\(K\)段。行吧那我们假设\(dp\)方程长成了这样: \(dp[i]=\max^{i}_{j=1} (s[i]-s[j])s[j]+C\), \(C\)为常数。显然\(C \rightarrow +\inf\)时\(dp\)会自然而然地分成\(n\)段,反之\(C\rightarrow -\inf\)时会分成1段。因此可以二分\(C\), 当分的段数达到\(K\)时,就是答案。最后减去\(C\times K\).
这样做应该是过不了的,但是至少能为我们提供一种思路。
如果在这个算法的基础上加上斜率优化应该就差不多能过了,时间复杂度\(O(n\log W)\), \(W\)为值域。这样\(K\)如果也是\(1e5\)应该也能过了。
(其实我是通过这题才看懂的上一题23333)

bzoj 2654 && bzoj 3675 总结的更多相关文章

  1. bzoj 2654 tree - 二分法 - 最小生成树

    给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行,每行 ...

  2. 【BZOJ】【3675】【APIO2014】序列分割

    DP+斜率优化 首先我们根据这个分割的过程可以发现:总得分等于k+1段两两的乘积的和(乘法分配律),也就是说与分割顺序是无关的. 再对乘积进行重分组(还是乘法分配律)我们可以转化为:$ans=\sum ...

  3. [BZOJ 2654]tree(陈立杰)

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  4. BZOJ 2654 & 玄学二分+MST

    题意: 给一张图,边带权且带颜色黑白,求出一棵至少包含k条白边的MST SOL: 正常人都想优先加黑边或者是白边,我也是这么想的...你看先用白边搞一棵k条边的MST...然后维护比较黑边跟白边像堆一 ...

  5. BZOJ 2654: tree

    Description \(n\) 个点, \(m\) 条边,边有权值和黑/白色,求含有 \(need\) 个白边的生成树. Sol 二分+Kruskal. 将每条白边都加上一个权值,然后跑最小生成树 ...

  6. BZOJ 2654: tree( 二分 + MST )

    我们给白色的边增加权值 , 则选到的白色边就会变多 , 因此可以二分一下. 不过这道题有点小坑... ------------------------------------------------- ...

  7. 【BZOJ 2654】 MST

    2654: tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示 ...

  8. BZOJ 2654 tree(二分答案+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2654 [题目大意] 给你一个无向带权连通图,每条边是黑色或白色. 让你求一棵最小权的恰 ...

  9. BZOJ 2654: tree Kruskal+二分答案

    2654: tree Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1863  Solved: 736[Submit][Status][Discuss ...

随机推荐

  1. velocity.js 中文文档 (教程)

    velocity.js 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. Vel ...

  2. 【BZOJ 2252】 矩阵距离

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2252 [算法] 将所有是”1“的点入队,然后广度优先搜索,即可 [代码] #incl ...

  3. LBS(定位)的使用

    一.LBS(定位)的使用 1.使用框架Core Location 2.CLLocationManager (1)CoreLocation中使用CLLocationManager对象来做用户定位 (2) ...

  4. Java 8 实战 P1 Fundamentals

    目录 Chapter 1. Java 8: why should you care? Chapter 2. Passing code with behavior parameterization Ch ...

  5. 截取字符(substr)检索字符位置(instr)

    1.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串注释: string 元字符串start_position 开始位置(从0开始)length 可 ...

  6. jquery的ajax同步异步执行

    大家先看一段简单的jquery ajax 返回值的js 代码 function getReturnAjax{  $.ajax({    type:"POST",    http:/ ...

  7. js软键盘

    <<!DOCTYPE html><html><head>  <title></title></head><body& ...

  8. python-day3 元组(tuple),列表(list),字典(dict)

    1.元组 tuple 有序数据,元组数据不可更改,若元组中有列表,可更改元组中的列表值里的值 元组中以","分开,若只有一个值就不是元组 包含各种数据类型 索引取值:t(2,0.0 ...

  9. ACM_鸡兔同笼(二元一次方程)

    鸡兔同笼 Time Limit: 2000/1000ms (Java/Others) Problem Description: 今有雉兔同笼,上有n头,下有m足,问雉兔各几何? Input: 输入有多 ...

  10. VHDL之concurrent之generate

    GENERATE It is another concurrent statement (along with operators and WHEN). It is equivalent to the ...