7.20 图论笔记

T1

题目

• 在 N 个点 P 条边的加权无向图上求出一条从 1 号结点到 N 号结点的路径,使路径上第 K+1 大的边权尽量小。
0K<N1000, 1P2000

Solution

• 一道自己做出来的蓝。
• 二分第 K+1 大边权为 mid,每次把边权 mid 的都设为 0,否则设为 1
• 从节点 1 跑一次最短路,当 dist[n]mid 时则满足条件,否则不满足。
• 正确性显然。

T2

题目

• 树形黑暗城堡有 N 个房间,M 条可以制造的双向通道,以
及每条通道的长度。
• 设 Di 为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长度;
• 而 Si 为实际修建的树形城堡中第 i 号房间与第 1 号房间的路径长度;
• 要求对于所有整数 i (1iN),有 Si=Di 成立。
• 有多少种不同的城堡修建方案,答案对 2311 取模。

Solution

• 简单来说,题目要求最短路径树的数量。
• 最短路径树是网络的源点到所有结点的最短路径构成的树。
• 我们从节点 1 跑一遍最短路。
• 当 dist[v]=dist[u]+e(u,v) 时,表明 v 的最短路是由 u 得到的,那 e(u,v) 就可以作为最短路径树上的边。
• 对每个点计算出它可作为最短路径树上的边的数量,根据乘法原理,乘起来就是答案。

T3

题目

• 要给 n 口矿井供电。
• 为了保证电力的供应,有两种办法:
1. 在这一口矿井上建立一个发电站,费用为 v
2. 将这口矿井与另外的已经有电力供应的矿井之间建立电网,费用为 p
• 计算保证所有矿井电力供应的最小花费。
1n300, 0vi,pij105

Solution

• 简单来说,要使每个点所在的联通块的都至少有一个发电站的最小花费。
• 建立一个虚拟源点 0,给每口矿井连一条边权为 vi 的边,跑一遍最小生成树即可。

T4

题目

N 头牛(每头牛的编号就是它所在农场的编号)要去参加一场在编号为 x 的牛的农场举行的派对。
• 有 M 条有向道路,每条路长 Ti
• 每头牛都必须参加完派对后回到家,每头牛都会选择最短路径。
• 求这 N 头牛的最短路径(一个来回)中最长的一条的长度。
1N10001xN
1M1000001Ti100

Solution

• 扇贝题目。
• 先跑一遍各点到 x 的距离,然后再跑一遍 x 到各点的距离即可。
• 但是朴素做法,虽然可以通过此题,但我们考虑优化。
• 建立正图和反图,都以 x 为起点,预处理出到每个点的最短路 d1d2
• 正图 d1 为回家路,反图 d2 为去 x 的路。
• 枚举每个点的 d1+d2,取最大值即可。

T5

题目

N 个点 M 条边的有向图,边有黑白两种颜色。现在要给点染色,每个点染成黑或白色。
• 白点只能走它连出去的白边,黑点只能走它连出去的黑边。
• 问是否存在一种染色方案,使得不存在一条 1n 的路径。如果存在这样的染色方案,在第一行输出 1,否则输出 n 最长的最短路径长度,每条边长度为 1 。在第二行,输出对应第一行答案的染色方案。
1N,M500000

Solution

• 考虑从 n 出发进行染色,尽可能让每一条路不可经过,这样也是最大化其他点到 n 的最短路。
• 如果当前为 u ,点 vu 有边,如果只有一种颜色的边,那么这条路是可以禁止经过的,将 v 设置成与边不同的颜色。如果有不同颜色的边,那么 v 的颜色无论怎么染色都可以到达 u
• 从 n 开始进行反向 BFS 。
• 当第一次遍历到未染色的点 x,将点 x 设为与边不同的颜色。如果遍历到染色的点,并且染色的点与边颜色相同,说明此点无法避开,加入到队列中,更新到 n 的最短路,直到 1 入队。
• 时间复杂度为 O(N+M)

T6

题目

• 在一个有 N 个顶点和 M 条边的图上有两个人,分别在 S 号节点和 T 号节点。他们要各自走到对面(即在 S 的人走到 T ,在 T 的人走到 S)。
• 给你 M 条边,描述为 U V D 分别表示该边连接的两个点及通过边的时间。
• 求两人经过最短路径(可能有多条)且不相遇(在同一单位时间内都在一条边或一个点上)的方案数。
N100000M200000

Solution

咕咕咕。

T6

题目

• 有一个地铁线路图,可以看做 N 个站点,M 条线路。每条线路由一个公司所有。
• 如果你乘坐同一公司的铁路,只需要花费 1 元,如果更换其他公司铁路,还需要再花费 1 元,如果再次换回原来的公司,还需要花费 1 元。
• 问从 1 号站点到 N 号站点的最小花费。
N,M200000

Solution

• 由于切换连通块一定会导致答案 +1,因此只要统计连通块的个数即可。
• 最朴素的建图方式是:把连在一起的同一城市的道路两端的点放进一个连通块内,块内每个点两两之间连一条权值为 1 的边。但是,边数过大,这样会爆空间。
• 考虑优化。
• 尝试建立虚点。
• 对于每个连通块,建立一个虚点。把连通块内每个点和虚点连一条权值为 0.5 的边。这样,任意两点都能以虚点为中转站来保持距离仍为 1
• 优化后,点的数量不超过 n+m,边的数量不超过 2m

T7

题目

• 三种连边方式:
1. v>u 点到点连边。
2. v>[l...r] 点到区间连边。
3. [l...r]>v 区间到点连边。
• 给定源点,求到所有点的最短路。

Solution

线段树优化建图模板题。
暴力连边必炸,考虑优化。
线段树。
建立两课线段树,一棵 “出树”,一棵“入树”。
“出树”向叶子方向连边,“入树”向根连边,边权均为 0
然后对于点到点连边,直接连即可。
对于点到区间连边,我们采用类似线段树区间修改的方式,递归“出树”找到被区间恰好覆盖的若干个节点进行连边。对于区间到点连边,递归“入树”连边即可。
建图完从源点开始跑一遍最短路即可。

posted @   恋暗  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示