DAY 05
最小生成树与二分图
CSP 暑期集训 · MST & Bipartite Graph · 算法+性质+建模全覆盖
Kruskal + Prim
MST算法+性质+建模
MST性质
切割性质+环性质+判定
二分图判定
染色法+奇环检测
匈牙利+König
匹配+四大量+建模
| 操作 | 次数 | 单次代价 | 总计 |
|---|---|---|---|
| sort 排序 | 1 | O(m log m) | O(m log m) |
| 初始化并查集 | 1 | O(n) | O(n) |
| Find 查找 | 2m | O(α(n)) | O(m·α(n)) |
| Union 合并 | ≤ n-1 | O(α(n)) | O(n·α(n)) |
| 总计 | O(m log m) |
| 对比项 | Dijkstra | Prim |
|---|---|---|
| 维护集合 | S = 已确定最短路的节点 | S = 已在MST中的节点 |
| dist含义 | s到u的最短距离 | MST集合到u的最小边权 |
| 松弛方式 | dist[v] = min(dist[v], dist[u]+w) | dist[v] = min(dist[v], w(u,v)) |
| 贪心选择 | 选dist最小的未确定节点 | 选dist最小的未加入节点 |
| 结果 | 单源最短路径树 | 最小生成树 |
| 对比项 | Kruskal | Prim(堆优化) | Prim(朴素) |
|---|---|---|---|
| 时间复杂度 | O(m log m) | O((n+m) log n) | O(n²) |
| 适用场景 | 稀疏图(m小) | 通用 | 稠密图(m≈n²) |
| 实现难度 | ⭐⭐ 排序+并查集 | ⭐⭐ 类似Dijkstra | ⭐ 简单循环 |
| 空间复杂度 | O(m) 存边 | O(n+m) 邻接表 | O(n²) 邻接矩阵 |
| 关键区别 | 按边贪心 | 按节点贪心 | 按节点贪心 |
| 方法 | 时间 | 空间 | 最佳场景 |
|---|---|---|---|
| Kruskal | O(m log m) | O(n+m) | m ≈ n(稀疏图) |
| Prim 堆优化 | O((n+m)log n) | O(n+m) | 通用/中等密度 |
| Prim 朴素 | O(n²) | O(n²) | m ≈ n²(稠密图) |
| 题型 | 核心思路 | 代表题目 |
|---|---|---|
| 直接求MST | Kruskal / Prim 模板 | P3366, P2330, P1111 |
| MST + 并查集连通性 | Kruskal过程中判断何时全连通 | P1111, P1991 |
| MST + 二分答案 | 二分某个值,用MST/连通性验证 | P1991 |
| MST变形(选边限制) | 排序+贪心,选满足条件的最小边集 | P1194 |
| 判断边是否在MST中 | 环性质:该边是否为某环的严格最大边 | CSP-S真题常见 |
| 次小生成树 | 枚举非MST边替换MST路径上的最大边 | 进阶考点 |
| 算法 | 解决的问题 | 时间复杂度 | 空间复杂度 | 核心思想 |
|---|---|---|---|---|
| Kruskal | 最小生成树 | O(m log m) | O(n + m) | 贪心选边+并查集判环 |
| Prim 堆优化 | 最小生成树 | O((n+m) log n) | O(n + m) | 维护集合+优先队列 |
| 染色法 | 二分图判定 | O(n + m) | O(n + m) | 交替染色检测奇环 |
| 匈牙利 | 二分图最大匹配 | O(n × e) | O(n + m + e) | 增广路+递归让位 |
| 概念 | 含义 | 公式 | 与最大匹配的关系 |
|---|---|---|---|
| 最大匹配 | 最多的不相邻边 | M | 直接用匈牙利算法 |
| 最小点覆盖 | 最少的点覆盖所有边 | = M | 等于最大匹配(König定理) |
| 最大独立集 | 最多的互不相邻点 | = n − M | 点覆盖的补集 |
| 最小边覆盖 | 最少的边覆盖所有点 | = n − M | = 最大独立集(无孤立点) |
| 考法 | 核心算法 | 难度 | 代表题目 |
|---|---|---|---|
| 直接求最大匹配 | 匈牙利算法 | 普及+/提高− | P3386, P2756 |
| 二分图建模(匹配) | 建图+匈牙利 | 普及+/提高− | P1894, P1640 |
| 二分图判定 | 染色法DFS/BFS | 普及 | P1330 |
| 二分答案+二分图 | 二分+染色判定 | 普及+/提高− | P1525 |
| 并查集+贪心(等价建模) | 排序+并查集 | 普及+/提高− | P1525(另一种解法) |
| 最小点覆盖/独立集 | König定理转化 | 提高 | 棋盘覆盖类问题 |
vis[v] = round 代替每轮 memset(vis, 0, ...)。vis[v] == round 代替 vis[v] == true。| 算法 | 解决的问题 | 时间复杂度 | 空间复杂度 | 核心思想 |
|---|---|---|---|---|
| Kruskal | 最小生成树 | O(m log m) | O(n + m) | 贪心选边+并查集判环 |
| Prim 堆优化 | 最小生成树 | O((n+m) log n) | O(n + m) | 维护集合+优先队列 |
| Prim 朴素 | 最小生成树(稠密图) | O(n²) | O(n²) | 线性扫描最小边 |
| 染色法 | 二分图判定 | O(n + m) | O(n + m) | 交替染色检测奇环 |
| 匈牙利 | 二分图最大匹配 | O(n × e) | O(n + m + e) | 增广路+递归让位 |
| König定理 | 最小点覆盖=最大匹配 | O(n × e) | 同匈牙利 | 匹配→点覆盖→独立集转化 |
| 编号 | 题目 | 知识点 | 难度 |
|---|---|---|---|
| 1 | P3366 【模板】最小生成树 | Kruskal/Prim 模板 | 普及 |
| 2 | P2330 [SCOI2005]繁忙的都市 | MST 最大边最小 | 普及 |
| 3 | P1194 买礼物 | MST 变形(优惠建图) | 普及 |
| 4 | P1111 修复公路 | Kruskal 应用(最早连通时间) | 普及 |
| 5 | P1546 [USACO3.1]最短网络 Agri-Net | Prim 经典题(邻接矩阵建图) | 普及 |
| 6 | P1991 [WC2005]卫星通讯 | MST 第 k 大边 | 普及 |
| 编号 | 题目 | 知识点 | 难度 |
|---|---|---|---|
| 7 | P1330 封锁阳光大学 | 染色法判定二分图 | 普及 |
| 8 | P3386 【模板】二分图最大匹配 | 匈牙利算法模板 | 普及+/提高− |
| 9 | P2756 [USACO4.1]飞行员配对方案 | 二分图匹配 | 普及+/提高− |
| 10 | P1894 [USACO4.2]完美的牛栏 | 二分图匹配(建图建模) | 普及+/提高− |
| 11 | P1640 [SCOI2010]连续攻击游戏 | 二分图匹配(时间戳优化) | 普及+/提高− |
| 12 | P1525 [NOIP2010]关押罪犯 | 二分答案+二分图判定 | 普及+/提高− |