当天走得太兴奋了,忘记保存就关电脑了o(╥﹏╥)o,现在补上( p′︵‵。)

今天是杨思祺老师的讲授~

练习题

首先求出最短路;

如果选择的边不是最短路上的边,那么毫无影响;

对于最短路径上的边,我们需要枚举路径上每条边,加倍再跑 Dijkstra。

我们可以考虑在建图方面进行改造:

假设我们建完图之后是长这个样子的:

我们先考虑 k=1 的情况,也就是我们可以使一条边的权值变为0。

我们可以将这个图在上层拷贝一份,将每个结点从上层的能到达的结点连一条有向边,这些边的权值为0,这样就实现了删除一条边的效果:

那么怎么设置上层点的编号呢?

我们可以像棋盘一样设置:

假设我们有个 n × m 的棋盘,那么这个棋盘上第 k 行第 j 列的数就是:(k-1)* m + j;

那么我们也可以根据这个规律来给上层的图的结点编号:(2-1)* n + j;

那么最终的答案就是:1 -> 6 的最短路,一遍Dijkstra 即可;

分析完上面 k=1 的情况后,我们就可以得出删除 k 条边的做法了:

我们拷贝 k 层图,按照上面的思路连权值为0的有向边,那么最后的答案就是:1 -> (k-1)*  n 点的最短路;

但是考虑到可能用不了 k 次更新(比如本来就不够 k 条边),所以我们再从分层图的每一层的点向下一层的对应点连一条边,表示白白浪费一次更新机会~

我们这样建边实现边的跳跃。

分层图的实现:通过映射,将二维图转化为一维图;

n建边,但是发现会有许多边是冗余的。

我们先按照 x 从小到大排好序;

假如平面内有三个点(x1,y1),(x2,y2),(x3,y3);

第一个点到第三个点的直接路径为:min(| x1- x3 |,| y1- y3 |)= x3 - x1

我们也可以考虑从中转点第二个点来走到第三个点:min(| x1- x2 |,| y1- y2 |)+ min(| x2- x3 |,| y2- y3 |)= x2 - x1 + x3 - x2 = x3 - x1

如果我们按照 x 排好序后,那么点 1 到点 3 的 x 距离完全可以用点 1 到点 2 + 点 2 到点 3 的 x 距离来表示;

也就是说,我们按照 x 排序后只需要在相邻两个点连一条边就好了;

对于 y 的话是一样的 。

我们尽量让最小边最大,但是这样操作会使最大边的选择范围变小,可能会导致最大边变大;

我们从大到小枚举最小边,用更大的边做 Kruskal,当 S 和 T 连通立即 break。

LCT,从大到小加边维护最小生成树。

1. 二分做法:

我们二分枚举 mid,小于 mid 的边连部落内部,大于等于 mid 的边是部落间的距离,看看是否连成了至少 k 个连通块即可 。

2. 最小生成树:

我们按照 Kruskal 的做法,当我们选中了 n-k 条边的时候,也就意味着此时有 k 个联通块,那么我们只需要再找一条不是部落间的边就是答案了,也就是选中的第 n-k+1 条边 。

我们需要求出每个杯子的奇偶性,才能知道答案,也就是要求每个 [ 0 , i ] 的奇偶性,就像前缀和一样,干脆直接用 S [ i ] 来表示区间 [ 0 , i ] 的奇偶性;

假如我们知道了区间 [ l , r ] 的奇偶性,那么我们就是知道了 S [ r ] - S [ l-1 ] 的奇偶性了;

奇偶性的转化:假如我们知道了 [ l , k ] 的奇偶性了,又知道了 [ k+1 , r ] 的奇偶性,那么我们也就知道了 [ l , r ] 的奇偶性!

我们发现这一点和树上唯一路径很像:知道了 x -> y 的路径,又知道了 y -> z 的路径,也就知道了 x -> z 的路径 。
那么通过这一条很重要的性质,我们求每个前缀和的话,其实就是求 0 都能走到每个点的最小花费和,再具体一点就是求最小代价使得整个图联通,直接最小生成树板子!

在任意一个非加油站点,不论目的地是哪个加油站,先前往最近 的加油站再前往目的地是最优策略。

加油站之间存在一种边,可以视为一条由非加油站点串起来的路径。我们希望找到加油站之间的最小生成树。

多源最短路,以所有加油站为起点,记录下每个点到最近加油站的距离,以及是哪个加油站。

建立用于做最小生成树之间的边:如果一条边 < u, v > 满足 u 和 v 的最近加油站不同,则 disu + disv + wu,v 构成一条 fromu 和 fromv 的边。 MST 算法求出最小生成树,倍增或树链剖分维护链上最小值。

记四个关键点为 E1,E2,W1,W2

一条边 < u, v, w > 在从 S 到 T 的最短路上,当且仅当 DS,u + w + Dv,T Du,v。 找出所有同时在 E1 到 E2 和 W1 到 W2 最短路上的有向边,一 定无环形成 DAG。 拓扑排序求 DAG 最长路。 注意:对于同时在 E1 到 E2 和 W2 到 W1 最短路上的有向边再做一次。

设 a [1] 是最小的,在模 a [1] 意义下,0 到 a [1] − 1 每个位置都 有其最小可被表示值。

而如果 k 是可被表示的,那么 k + a [1], k + 2 × a [1], . . . 都可被表示。

故问题转化为求解每个位置最小可被表示数字。 建立 a[1] 个点,对于每个 a [ j ],j , 1,我们理解为可以花费 a [ j ] 代价从 x 点转移到 ( x + a [ j ] ) mod a [1] 点。建边之后从0 号点出发做单源最短路即可。

8月清北学堂培训 Day 7的更多相关文章

  1. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  2. 8月清北学堂培训 Day6

    今天是杨思祺老师的讲授~ 图论 双连通分量 在无向图中,如果无论删去哪条边都不能使得 u 和 v 不联通, 则称 u 和 v 边双连通: 在无向图中,如果无论删去哪个点(非 u 和 v)都不能使得 u ...

  3. 10月清北学堂培训 Day 7

    今天是黄致焕老师的讲授~ 历年真题选讲 NOIP 2012 开车旅行 小 A 和小 B 决定外出旅行,他们将想去的城市从 1 到 n 编号,且编号较小的城市在编号较大的城市的西边.记城市 i 的海拔高 ...

  4. 10月清北学堂培训 Day 6

    今天是黄致焕老师的讲授~ T1 自信 AC 莫名 80 pts???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...

  5. 10月清北学堂培训 Day 5

    今天是廖俊豪老师的讲授~ T1 第一次想出正解 30 pts: k <= 10,枚举如何把数放到矩阵中,O ( k ! ): 100 pts: 对于矩阵的每一列,我们二分最小差异值,然后贪心去判 ...

  6. 10月清北学堂培训 Day 4

    今天是钟皓曦老师的讲授~ 今天的题比昨天的难好多,呜~ T1 我们需要找到一个能量传递最多的异构体就好了: 整体答案由花时间最多的异构体决定: 现在的问题就是这么确定一个异构体在花费时间最优的情况下所 ...

  7. 10月清北学堂培训 Day 3

    今天是钟皓曦老师的讲授~ zhx:题很简单,就是恶心一些qwq~ T1 别人只删去一个字符都能AC,我双哈希+并查集只有40?我太菜了啊qwq 考虑到越短的字符串越难压缩,越长的字符串越好压缩,所以我 ...

  8. 10月清北学堂培训 Day 2

    今天是杨溢鑫老师的讲授~ T1 物理题,不多说(其实是我物理不好qwq),注意考虑所有的情况,再就是公式要推对! #include<bits/stdc++.h> using namespa ...

  9. 10月清北学堂培训 Day 1

    今天是杨溢鑫老师的讲授~ T1 1 题意: n * m 的地图,有 4 种不同的地形(包括空地),6 种不同的指令,求从起点及初始的状态开始根据指令行动的结果. 2 思路:(虽然分了数据范围但是实际上 ...

随机推荐

  1. 浅谈人脸识别中的loss 损失函数

    浅谈人脸识别中的loss 损失函数 2019-04-17 17:57:33 liguiyuan112 阅读数 641更多 分类专栏: AI 人脸识别   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  2. Asp.Net Core 2.0 之旅---@Html.Action

    原文:Asp.Net Core 2.0 之旅---@Html.Action 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  3. js 三级联动

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  4. win8系统安装.net Framework3.5

    Win8 离线安装 .Net Framework 3.5(工具+方法)(支持Win8.1) 微软在最新的 Win8 / Win8.1 系统中没有集成 .NET 3.5,如果安装的话,必须是在线安装,甚 ...

  5. 让网站支持老版本IE6、7、8、9浏览器的3种解决方案

    1.htmlshiv.js Remy的 HTML5shiv通过JavaScript 来创建HTML5元素(如 main, header, footer等).在某种程度上通过JavaScript 创建的 ...

  6. ifeq ifneq ifdef ifndef

    条件语句中使用到了三个关键字:“ifeq”.“else”和“endif”.其中: 1.        “ifeq”表示条件语句的开始,并指定了一个比较条件(相等).之后是用圆括号括包围的.使用逗号“, ...

  7. mysql的unsigned属性负值报错和为0情况及mysql的严格模式

    最近发现在进行线程操作时,发现数据库的unsigned字段减为负数时并未报错而是变为0,因此去寻找解决方案,发现这和我的sql_mode有关. sql_mode MySQL服务器可以以不同的SQL模式 ...

  8. 你应该使用Python3里的这些新特性

    概述 由于Python2的官方维护期即将结束,越来越多的Python项目从Python2切换到了Python3.可是,在实际的工作中,我发现好多人都是在用Python2的思维去写Python3的代码, ...

  9. 快速认识Python

    1.数字和表达式 什么是表达式,1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数.1+2*3 经过计算后得到的结果是7,就1+2*3 = 7.我们可以将计算结果保存在一个变 ...

  10. Ubuntu系统---C++之VScode IDE 编译器安装

    Ubuntu系统---C++之VScode IDE 编译器安装 简单了解了一下VScode,直观印象:安装包很小(不像VS那么大占用十G左右).跨平台.小巧.可以编译C++ / java / pyth ...