当天走得太兴奋了,忘记保存就关电脑了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. C# 重载,重写,代理,枚举实例

    1.日期说法时区不同所取到的值也不同, 多个国的服务器要注意这个玩意 DateTime newDate = DateTime.Now; Console.WriteLine(newDate.ToStri ...

  2. js中WebSocket

    一.概念 WebSocket的定义 WebSocket是html5提供的一种在单个TCP连接上进行双向通信的协议,解决了客户端和服务端之间的实时通信问题.浏览器和服务器只需完成一次握手,两者之间就可以 ...

  3. 【算法】php实现排序(一)

    选择排序方式:先让第一位与其他位比较大小找到最小的数字,然后是第二位与除第一位的其他位比较大小找出第二位,依此类推 $arr = [2,45,12,67,33,5,23,132,46]; for ($ ...

  4. Could not retrieve transaction read-only status from server问题排查

    今天发现save task的时候经常后台会报这个错,而且有的时候还会卡住等20几分钟才执行完. 2019-11-12 15:08:29.410 http-nio-9080-exec-6 ERROR o ...

  5. Go 函数编程

    函数的声明 在 Go 语言中,函数声明通用语法如下: func functionname(parametername type) returntype { // 函数体(具体实现的功能) } 函数的声 ...

  6. 借助Spring工具类如何实现支持数据嵌套的赋值操作

    假设有两个Bean A和B,想将B中的属性赋值到A实体中,可以使用get set来实现,当属性过多时,就会显得很冗余,可以使用spring提供的BeanUtils.copyProperties()来实 ...

  7. MyBaties --day1

    今天就来聊聊这个东西 今天的主角相信大家也看到了 MyBaties  是个什么东东 它有什么作用?怎么用?好不好用今天来说说 .说到MyBaties 就不得不谈到JDBC大家可能都知道 JDBC用来操 ...

  8. 根目录/缺少执行权限x产生的两种错误

    Linux根目录缺少x权限,产生的两个错误: 以root用户执行systemctl命令报权限相关问题 [root@hps2 ~]# systemctl stop hps-manager * (pktt ...

  9. AWD模式搅屎模式

    AWD模式搅屎模式 ###0x01 出题思路 ####1:题目类型 1-出题人自己写的cms,为了恶心然后加个so. 2-常见或者不常见的cms. 3-一些框架漏洞,比如ph师傅挖的CI这种 #### ...

  10. Django drf:序列化增删改查、局部与全局钩子源码流程、认证源码分析、执行流程

    一.序列化类的增.删.改.查 用drf的序列化组件   -定义一个类继承class BookSerializer(serializers.Serializer):   -写字段,如果不指定source ...