当天走得太兴奋了,忘记保存就关电脑了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. Redis的bind的误区(转)

    原文1:https://blog.csdn.net/cw_hello1/article/details/83444013 原文2:https://www.cnblogs.com/suiyueqiann ...

  2. ORA-07445: exception encountered: core dump [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x1858C3F] [SI_KERNEL(general_protection)] []

    开发反馈应用无法连接数据库,发现数据库实例崩溃,且数据库为11.2.0.4 单实例. 数据库告警日志发现,数据库崩溃之前出现ORA- ORA-: exception encountered: core ...

  3. Idea 使用 Junit4 进行单元测试

    目录 Idea 使用 Junit4 进行单元测试 1. Junit4 依赖安装 2. 编写测试代码 3. 生成测试类 4. 运行 Idea 使用 Junit4 进行单元测试 1. Junit4 依赖安 ...

  4. (三)ActiveMQ之发布- 订阅消息模式实现

    一.概念 发布者/订阅者模型支持向一个特定的消息主题发布消息.0或多个订阅者可能对接收来自特定消息主题的消息感兴趣.在这种模型下,发布者和订阅者彼此不知道对方.这种模式好比是匿名公告板.这种模式被概括 ...

  5. (二十一)SpringBoot之集成mybatis:使用mybatis xml

    一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  6. WebSocket协议探究(二)

    一 复习和目标 1 复习 协议概述: WebSocket内置消息定界并且全双工通信 WebSocket使用HTTP进行协议协商,协商成功使用TCP连接进行传输数据 WebScoket数据格式支持二进制 ...

  7. 关于安装Chrome插件elasticsearch-head

    因为Chrome商店不能使用,安装插件很麻烦. 可以在github上下载elasticsearch-Head插件:https://github.com/mobz/elasticsearch-head/ ...

  8. 分布式事务(ACID特性、CAP定律)

    普通事务和分布式事务的区别: 普通事务就是一般所说的数据库事务,事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.当事务被提交给了DBMS(数据库管理系统),则DBMS(数 ...

  9. LeetCode:626.换座位

    题目链接:https://leetcode-cn.com/problems/exchange-seats/ 题目 小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们 ...

  10. vue中使用ts后,父组件获取执行子组件方法报错问题

    一.问题产生背景: 子组件的一个方法: update () { this.$nextTick(() => { this.ul_slots.forEach((ul, cur_slots_index ...