![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
qq_38232157
这个作者很懒,什么都没留下…
展开
-
一本通 1338:【例3-3】医院设置(Floyd算法)
Floyd原创 2022-10-16 15:07:46 · 116 阅读 · 0 评论 -
POJ 1659 Frogs‘ Neighborhood (Havel 定理)
Havel 定理:序列的可图:给出一个 由非负整数组成的序列,如果是某个无向图的度序列,则称该序列是可图的。而 Havel 定理,就是判断序列的可图的方法。先按度数从大到小排序, 每次处理完度数一个点,删除之,剩下的排序。再处理度数最大的点。 如果出现不合理的情况,则该序列不可图。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using nam原创 2020-12-11 20:08:07 · 144 阅读 · 0 评论 -
洛谷 P3379 【模板】最近公共祖先(LCA)( tarjan算法, 模板题)
最近公共祖先LCA, tarjan算法本题要点:1、tarjan算法 是离线算法,把所有的查询读入,最后统一输出。2、数组 vis[k] 表示 k点的访问状态,vis[k] == 0, 表示未访问vis[k] == 1, 表示已经访问, 但是未回溯vis[k] == 2, 表示已经回溯3、 如果 某次查询 (x, y), 此时点x 正处于 vis[x] == 1 的状态,而y处于 vis[y] == 2 的状态,那么 lca(x, y) 就是 y点一直往上走,直达遇到第一个祖先 z, vis原创 2020-09-20 17:22:28 · 157 阅读 · 0 评论 -
洛谷P5687 [CSP-SJX2019]网格图(最小生成树,找规律)
最小生成树,找规律本题要点:1、n <= 3 * 10^5, 求最小生成树,kruskal 和 prim 都严重超时。 这题图的边密密麻麻,分布有规律。2、首先, n * m 个点, 最小生成树连上的边有 n * m - 1 条。每连上一条边,都选择的是当前可以选择的最小的边。3、数组 a[MaxN], b[MaxN] 先从小到大排序。然后, 依次从两个数组中,选择最小的数。如果这两个数组的头元素相等,就要看 n 和 m 的大小来选择了。 n < m, 两个数组的头元素相等,选择行,也原创 2020-09-17 19:00:03 · 350 阅读 · 0 评论 -
洛谷 P1038 神经网络(图的拓扑排序)
图的拓扑排序本题要点:1、n <= 100, 很小,用邻接矩阵来存图。 in_deg[MaxN], out_deg[MaxN] 分别表示点的入度,出度。2、第一步先找到入度为0 的点,全部加入队列中。注意,这部分的点的 转态值c 不需要计算。因此,用 vis 数组来区分。3、 然后按照求一般拓扑排序的方式来求(入度为0 的点加入队列),这里多了一个,计算每个点的 转态值 c。4、用 set<pair<int, int> > ans 来存答案,自动排序,处理简单。原创 2020-09-13 12:08:44 · 166 阅读 · 0 评论 -
POJ 2728 Desert King(算法竞赛进阶指南,最小生成树,0/1分数规划)
算法竞赛进阶指南368页,最小生成树,0/1分数规划题目意思:n个点,每个点以平面坐标 (x, y) 表示, 其海拔高度是 z。 点与点之间的距离就是 (x1, y1) 与 (x2, y2) 的平面距离 (这里用数组 a[MaxN][MaxN] 来存)。点与点之间的高度差值的绝对值,叫做成本(这里用数组 b[MaxN][MaxN] 来存)。题目要求,找到一个图的生成树,使得这棵树 总的成本 sum{成本} / sum{距离} 最大。本题要点:1、 二分法,构造一个新的无向图, 边的权值 是 a原创 2020-09-05 22:22:42 · 119 阅读 · 0 评论 -
HOJ 5627 Clarke and MST(最小生成树变形,经典)
最小生成树变形,经典题目意思:有n个点,m条边。 然后问,求其中一个生成树,使得这个树的每一条边长度 全部 进行 与 运算,得到的结果最大。其中,边长度 <= 1e9, 长度在 int 的范围。本题要点:1、int 有 32 位。vector v[32]; // v[k] 存放的是边权 的第k位二进制是 1 的边的编号。2、从最高位 k 开始, 如果 v[k].size() >= n - 1, 说明有 n - 1 条边,可能够成一个生成树,使得每一条边 进行 与运算后,其值不原创 2020-09-05 18:45:32 · 158 阅读 · 0 评论 -
HOJ 1102 Constructing Roads(最小生成树,水题)
最小生成树,水题题目意思:有n个村庄,每两个村庄都有一段距离。现在已经修好了e条路,问,最少再修多少路程(修的路的所有的总里程), 使得全部连通。本题要点:1、首先,把修好的路的距离,全部改为0, 再套用 kruskal 算法, 求到最小生成树,就是要修的总里程。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 110,原创 2020-09-05 18:22:15 · 131 阅读 · 0 评论 -
HOJ 1233 还是畅通工程(最小生成树,水题)
最小生成树,水题本题要点:1、套用 prim 模板即可。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MaxN = 110, MaxM = 10010;int fa[MaxN];int n, m;bool vis[MaxN];struct rec{ int x, y, z原创 2020-09-05 18:16:34 · 97 阅读 · 0 评论 -
HOJ 3938 Portal (最小生成树,kruskal,并查集)
最小生成树,kruskal,并查集题目意思:n个点,m条边的图,双向边。问,权值是 len 的时候,有多少对点 x 和 y,可以从x 走到 y;当权值 大于等于某条边的长度的时候,才能走那条边。 从点x 走到 y, 和从y 走到 x, 算是一个 点对。本题要点:1、实际模拟了 kruskal算法的过程。 每次选择一条当前最短的边(假设两点x, y, 边长 z),加入最小生成树,当点的两点 x 和 y不属于同一个并查集的时候,这条边才被加入。 并且,如果 权值len == z 的时候,增加的可原创 2020-09-05 12:18:12 · 176 阅读 · 0 评论 -
HOJ 2680 Choose the best route(单源最短路径dijkstra,水题)
单源最短路径dijkstra,水题题目意思:有位妹子,要去探望朋友。坐公交,朋友家附近只有一个公交站 s 。 妹子家附近有 w 个公交站可以选择。每两个公交站 x 到 y 需要花费一定时间。问妹子需要最少的时间。本题要点:1、注意的地方: 路是单向的。2、单源最短路径,dijkstra算法。 反向建图。求 s 点的单源最短路径即可。#include <cstdio>#include <cstring>#include <iostream>#includ原创 2020-09-04 18:06:16 · 86 阅读 · 0 评论 -
HOJ 1874 畅通工程续(单源最短路径dijkstra,水题)
单源最短路径dijkstra,水题本题要点:1、n <= 200, 直接用邻接矩阵存图,重边的话取最小值。套用 dijkstra 模板。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MaxN = 210;int n, m, s, t;int a[MaxN][MaxN], d[原创 2020-09-04 16:46:42 · 67 阅读 · 0 评论 -
POJ 3615 Cow Hurdles(最短路径Floyd算法)
最短路径Floyd算法题目意思:n个点,m条有向边, 每条边都有一个长度。 从点x 到 点y,有一条路径的话,最长的那一段距离表示这条路径的花费。求任意两点之间的最小花费。本题要点:1、n <= 300, 可以用 floyd 算法,求任意两点之间的最小花费。原来的路径是累加起来的,现在只需要记录,这条路径的最大长度即可。2、 点 i 经过 点 k ,然后到达点 j. 那么,d[i][j] = min(d[i][j], max(d[i][k], d[k][j])),前提是, i 和 k原创 2020-09-04 16:16:20 · 108 阅读 · 0 评论 -
HOJ 2544 最短路(最短路径,Floyd算法,裸题)
最短路径,Floyd算法,裸题本题要点:1、Floyd算法复杂度 O(n^3), 适合 n <= 200 的图。2、用邻接矩阵来存图,一方面是 Floyd算法所必须的内存空间(Floyd算法依据动态规划),另一方面,可以方便去掉重边。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const in原创 2020-09-03 19:06:36 · 86 阅读 · 0 评论 -
HOJ 1704 Rank(floyd传递闭包)
floyd传递闭包本题要点:1、d[i][j] == 1 表示 i < j;d[i][j] == 0, 表示i 和j 的大小关系不确定。2、套用 多源最短路径 Floyd 算法, 可以计算出, 任意两点是否具有小于的关系。初始化:先全部初始化为0, 然后, for(int i = 1; i <= n; ++i) d[i][i] = 1; 每次读入的一条边 x y ,就假设存在 x < y 的关系, d[x][y] = 1;3、 Floyd 是三重循环,复杂度 O(n^3),原创 2020-09-03 19:02:22 · 115 阅读 · 0 评论 -
洛谷 P3386 【模板】二分图最大匹配(二分图最大匹配,裸题)
二分图最大匹配,裸题本题要点:1、左部节点:n个点,右部节点:m个点n <= 500, 用邻接矩阵存图,还可以有效去掉重边2、增广路算法,套模板#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 510;int a[MaxN][MaxN], match[MaxN];int n, m, e;bool vis[Ma原创 2020-09-03 15:33:46 · 89 阅读 · 0 评论 -
UVA 10305 Ordering Tasks(算法竞赛入门经典,拓扑排序,裸题)
算法竞赛入门经典167页,拓扑排序,裸题本题要点:1、用 deg[x], 存放点x的入度。先把所有入度为0 的点加入队列 queue;2、每次从队头取出一个点 y, 将y 所指向的所有点的入度减去1. 如果某点度数为0, 把该点也加入队列。#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;const int Max原创 2020-09-02 12:22:34 · 95 阅读 · 0 评论 -
UVA 12118 Inspector‘s Dilemma(算法竞赛入门经典, 图的连通,欧拉路径)
算法竞赛入门经典181页, 图的连通,欧拉路径题目意思:有n 座城市,每两个城市之间都有一条双向道路。现在给出 m 条道路,连接了若干城市,现在要求,寻找任意一条路径,使得这条路径,经过这m条道路。本题要点:1、首先考虑图的连通问题:假如该图有 block_num 个连通块, 每个连通块都存在欧拉路径,那么,只需要把这 block_num个连通块,连起来即可。因此只需要添加 block_num - 1 条边(只有一点的连通块不考虑)。某个连通块存在欧拉路径,说明这连通块,最多只有两点是奇度数原创 2020-09-01 02:10:43 · 271 阅读 · 0 评论 -
POJ 1422 Air Raid(DAG的最小路径覆盖,模板题)
DAG的最小路径覆盖,模板题题目意思:有n个点,m条边的有向无环图,每个点放一名士兵,然后士兵沿着图走,直到不能走为止, 每条只能由一名士兵走过,问最少需要多少士兵。本题要点:1、图很小,可以用邻接矩阵来存图。2、有向无环图,写成对应的二分图:当点x -> y, 看成左部节点x 指向右部节点 y + n, 左部节点的范围 1 ~ n, 右部节点范围 n + 1 ~ 2 * n3、 最小路径覆盖 = 点数 - 二分图最大匹配。#include <cstdio>#inclu原创 2020-08-20 22:51:50 · 87 阅读 · 0 评论 -
POJ 2771 Guardian of Decency(二分图最大独立集,裸题)
二分图最大独立集,裸题题目意思:有k 个学生,学生有男女,某些男女之间有些可能谈恋爱。老师要带一些学生出去旅游,要求不能有男女之间谈恋爱。本题要点:1、k <= 500, 用邻接矩阵来存图。左部节点: n个男学生右部节点: m个女学生。2、老师要带尽可能多的学生出去,就是取的点尽量多,显然是二分图最大独立集。二分图最大独立集 = 顶点个数 - 二分图最大匹配#include <cstdio>#include <cstring>#include <c原创 2020-08-20 22:42:14 · 117 阅读 · 0 评论 -
HOJ 1269 迷宫城堡(强连通分量tarjan算法,裸题)
强连通分量tarjan算法,裸题本题要点:1、题目要求,问有向图中,从任意一点是否能够到达其他的任意一点。如果这图是强连通图,也就是强连通分量只有一个的时候,就能到到。2、tarjan算法 求强连通分量scc[i] 表示点i所在的强连通分量编号sccnum 表示强连通分量编号如果 sccnum == 1, 输出 Yes, 否则输出 No#include <cstdio>#include <cstring>#include <algorithm>#in原创 2020-08-20 18:24:01 · 109 阅读 · 0 评论 -
POJ 3041 Asteroids(二分图最小点覆盖, 转化)
二分图最小点覆盖题目意思:有 n * n 的矩阵, 有k个小行星, 有位美女开飞船,开一枪可以消灭一行或者一列的小行星。问,最少开多少枪, 可以消灭所以的小行星。本题要点:1、左部节点: n个横坐标右部节点:n个纵坐标n <= 500, 用邻接矩阵来存图2、 最小点覆盖数定义:就是对于一个图,选取最少数量的点S,使得对于所有的边,都至少有一端点是S中的点。该题目中,小行星的坐标 (x, y) 转化为 二分图 左部的点 x 连上 右部的点y的一条边。求出最小点覆盖数 的 s个点后,原创 2020-08-19 18:28:42 · 128 阅读 · 0 评论 -
HOJ 3729 I‘m Telling the Truth(二分图最大匹配,建图)
二分图最大匹配,建图本题要点:1、左部节点:学生, 学生的范围 m <= 60右部节点:排名, 名次的范围 n <= 100000每个学生与之对应的可能的排名,都连线。2、题目要求输出最大的匹配数,然后输出学生的序号,按字典序最大的输出。套用 增广路模板,扫描m个学生时候,从 m 到 1 扫描,这样优先给序号大的学生安排排名。最后的结果就是 最大的字典序。3、 增加一个数组,res, res[i] == 1 表示学生i有匹配的排名#include <cstdio>原创 2020-08-19 16:59:37 · 81 阅读 · 0 评论 -
HOJ 2063 过山车(二分图最大匹配,裸题)
二分图最大匹配,裸题本题要点:1、左部节点:n个男同学,右部节点:m个女同学n <= 500, 用邻接矩阵存图。2、增广路算法,套模板#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 510;int a[MaxN][MaxN], match[MaxN];bool vis[MaxN];int k, n, m;原创 2020-08-19 15:32:25 · 91 阅读 · 0 评论 -
POJ 3352 Road Construction(边双连通分量)
题目意思:给定一个无向图,图中没有重边,问添加几条边才能使得无向图变为 边双连通图本题要点:1、tarjan算法中,求割边时候,每个点都记录一个时间戳 dfn[i], 和回溯值 low[i]。有多少个不同的low 值,就有多少个边双连通分量。2、缩点:把low值相同的点,看做是一个缩点。用 deg 数组记录每一个缩点的入度。3、问题转化为:在缩点树上,添加多少条边,才能使得树变为一个边双连通图。至少添加边数 = (入度为1的缩点数 + 1) / 2#include <cstdio&原创 2020-08-18 16:14:20 · 129 阅读 · 0 评论 -
HOJ 4857 逃生(拓扑排序,反向建图)
题目要求:优先输出最小的数字,而不是按所有方案的字典序输出。比如: 6 -> 4 -> 13 -> 9 -> 25 -> 7 -> 81 -> 02 -> 08 -> 0如果按字典序输出:3 5 6 4 1 7 8 9 2 0 但是这显然不是本题要求的答案,因为节点 1 的位置还不够靠前。优先输出最小数字:6 4 1 3 9 2 5 7 8 0本题要点:1、参考 https://blog.csdn.net/u012861385/a原创 2020-08-17 15:59:33 · 82 阅读 · 0 评论 -
HOJ 1285 确定比赛名次(拓扑排序)
拓扑排序本题要点:1、如果要按字典序输出各个队的编号,用 优先队列 priority_queue来存放节点编号,注意 priority_queue 默认是大根堆,要写成小根堆 priority_queue<int, vector, greater >2、 n <= 500, 有可能出现重边的情况,用 邻接矩阵 mp[MaxN][MaxN] 来去重。#include <cstdio>#include <cstring>#include <iostr原创 2020-08-12 23:28:02 · 81 阅读 · 0 评论 -
POJ 2536 Gopher II(二分图最大匹配,裸题)
二分图匹配,裸题本题要点:1、二分图匹配:左部点是n个老鼠,右部点是m个鼠洞。当老鼠i和洞j之间的距离超过 s*v 的时候,i和j之间不存在边。用增光路算法算出最大匹配数 ans。 ans表示可以生存的老鼠, n - ans 表示被吃掉的老鼠。2、多 case#include <cstdio>#include <cstring>#include <iostream>#include <cmath>using namespace std;c原创 2020-07-22 15:21:15 · 101 阅读 · 0 评论 -
POJ 2387 Til the Cows Come Home(最短路径,dijkstra算法, 裸题)
最短路径,dijkstra算法题目意思:有n个地点,编号从1 到 n, 题目给出m条边。要求从点n到点1 的最短路径。裸的 最短路径,dijkstra算法。本题要点:1、用邻接表来存图,双向边。2、dijkstra 算法,用堆来优化。#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;const int Max原创 2020-07-14 23:32:51 · 170 阅读 · 0 评论 -
POJ 3692 Kindergarten(挑战程序设计竞赛,二分图最大团)
挑战程序设计竞赛,283页,二分图最大团题目意思:幼儿园,所有女生相互之间认识,所有男生之间相互认识,有些女生和某些男生认识。现在,老师想挑选一些孩子玩游戏,这需要所有玩家彼此认识。您将帮助查找老师可以挑选的最大孩子数。本题要点:1、二分图的图:二分图的子图中,左部的任意一个节点和右部所有的节点都有连线,该子图称为二分图的 团。点数最多的团,称为二分图的最大团。2、二分图G 的补图 G1, G的最大团等于其补图G1的最大独立集。3、二分图的最大独立集 = 二分图的总点数 - 二分图的最大原创 2020-07-14 14:41:15 · 108 阅读 · 0 评论 -
POJ 1466 Girls and Boys (挑战程序设计竞赛,二分图最大独立集)
挑战程序设计竞赛,283页,二分图最大独立集二分图的最大独立集题目意思:在一群男女生之间存在浪漫关系,且只存在于男女之间,现给出存在关系的人的编号,但没给具体的男女性别,现在要求一个集合,在集合中任意两人都不存浪漫关系,输出集合中元素的个数.本题要点:1、定理:二分图的最大独立集 = 总点数 - 最大匹配数2、这里采用邻接表来存图。用增广路算法求出最大匹配数。二分图匹配,因为没有分左右每对匹配会出现两次。 最后算出来的 ans 要除以2;#include <cstdio>#原创 2020-07-14 12:22:23 · 101 阅读 · 0 评论 -
POJ 1469 COURSES(二分图最大匹配,裸题)
题目意思:p门课,n个学生,每一门课都有若干学生可以当代表。当然,每一个学生最多只能是一门课的代表。问:能否为每一门课都选出一个学生当代表。本题要点:1、二分图最大匹配:左部节点:课程的编号;右部节点:学生的编号;用邻接矩阵存放 图,使用增光路算法求出最大匹配数。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 310原创 2020-07-13 23:41:49 · 226 阅读 · 0 评论 -
POJ 1274 The Perfect Stall(挑战程序设计竞赛,二分图最大匹配,裸题)
题目意思:n头牛(编号1 ~ n),m个牛栏(编号 1 ~ m).每头牛只会在特定的牛栏产奶。当然,每一个牛栏只能装进一头牛。题目要求:怎样安排每头牛到特定的牛栏,使得牛产奶数最多。本题要点:1、二分图最大匹配:左部节点:牛的编号;右部节点:牛栏的编号;用邻接矩阵存放 图,使用增光路算法求出最大匹配数。#include <cstdio>#include <cstring>#include <iostream>using namespace std;原创 2020-07-13 23:13:57 · 139 阅读 · 0 评论 -
POJ 1325 Machine Schedule(算法竞赛进阶指南,二分图最小点覆盖)
算法竞赛进阶指南,434页,二分图最小点覆盖题目意思:有两台机器A和B,分别有n种和m种不同的模式,有k个工作,每个工作都可以在那两个机器的某种特定的模式下处理。如job0既可以在A机器的3好模式下处理,也可以在B机器的4号模式下处理。机器的工作模式改变只能通过人工来重启。通过改变工作的顺序,和分配每个工作给合适的机器可以减少重启机器的次数达到最小。任务就是计算那个最小的次数。初始时两台机器都运行在0号模式下本题要点:1、二分图最小点覆盖问题:每个作业 i 可以以机器A 的 a[i]模式运行原创 2020-07-13 21:55:35 · 119 阅读 · 1 评论 -
POJ 2226 Muddy Fields(算法竞赛进阶指南,二分图最小点覆盖)
算法竞赛进阶指南,434页,二分图最小点覆盖题目意思:在 n * m 的网格,有些格子泥泞,有些干净的,现在用宽度为1, 长度随意的木板覆盖泥泞点,但不能覆盖任何的干净点。木板可以重叠,问最少需要多少块木板。本题要点:1、首先木板覆盖的只能是单个的泥泞点, 或者是连续的若干个泥泞点。木板不能覆盖 干净点。依次扫描每一行,碰到连续的若干个泥泞点,就用一块木板覆盖该点。每一块木板编上编号,从1 开始, 这些编号叫做 行泥泞块。同理,依次扫描每一列,得到 列泥泞块。以 行泥泞块 块为左部节点, 列原创 2020-07-13 21:41:03 · 100 阅读 · 0 评论 -
洛谷 P1073 最优贸易(算法竞赛进阶指南,最短距离,spfa)
算法竞赛进阶指南, 356页,最短距离,spfa算法本题要点:1、 本题求一条从1点到 n点的路径, 先过 p点,在过q点,使得 q点的权值减去p点的权值最大。2、两个图,图1 是按题目给的数据建一个有向图,图 2 将 图1的所有边取反。两个 spfa, spfa1 从1点出发,d1[x] 表示1点到点x的路径上的权值最小的点。spfa2 从n点出发,d2[x] 表示n点到点x的路径上的权值最大的点。然后, d2[x] - d1[x] 的最大值就是答案。3、首先, dijkstra 算法,求路原创 2020-06-29 19:37:39 · 208 阅读 · 0 评论 -
HOJ 2586 How far away ?(算法竞赛进阶指南,树上倍增法,最近公共祖先LCA)
算法竞赛进阶指南, 376页,树上倍增法求 最近公共祖先LCA题目意思:求任意两点的距离。先求出任意两点的 LCA(x, y), 然后答案就是:dist[x] + dist[y] - 2 * dist[lca(x, y)]本题要点:1、以点1为根,d[i]表示从i到根的深度(d[1] = 1); dist[i] 表示i到1点的距离。f[i][k] 表示 点i 向上走 2^k 步到达的节点号, 如果该节点不存在, 就令 f[i][k] = 0。f[i][0]就是节点i的父节点。除此之外, 动态规原创 2020-06-29 17:17:36 · 95 阅读 · 0 评论 -
POJ 2253 Frogger (最短距离,dijkstra,裸题)
题目意思:一只青蛙从1号石头跳到2号石头,不能直接跳过去,需要借助其他的石头来跳,求从1号石头到2号石头所有路径中的最大跳跃距离的最小值。本题要点:1、单源最短路径,dijkstra算法,裸题。2、题目的点事以 坐标的形式给出,求出每两点之间的额距离,然后用 dijkstra 算法求出,以1点为起点,终点是 2 点的最短距离 d[2]。注意,这里的最短距离,指的是路径上最大跳跃距离的最小值,只需在原来的dijkstra 算法的代码改改即可。#include <cstdio>#i原创 2020-06-29 16:24:08 · 130 阅读 · 0 评论 -
POJ 1062 昂贵的聘礼 (最短距离, dijkstra算法)
最短距离, dijkstra算法本题要点:1、图的建立: 假想有一个原点 0, MaxN = 110, 用邻接矩阵来存图。扫描输入的数据,记录第i点的level 和 val(需要的金币)。假设当前点是i,i点的替换点是 j,存在一条边,由 j点指向 i点, 边的权值是这个代替点额外需要的金币。当然,原点 0 指向每一点i, 权值为第i点需要的金币。2、 然后,通过 vis 数组,来限定点的等级。以第i个点的等级为基础, 分别求 0 点到 1 点的最短距离。以第i点的level 为最小值,等级的取原创 2020-06-29 16:10:33 · 116 阅读 · 0 评论 -
POJ 2239 Selecting Courses(二分图最大匹配,模板题)
题目意思:规定每周每天有 12 节课,先给出 n 个课程,以及这 n 个课程在第 p 天的第 q 节上,如果几个课都在同一天的同一节上,那么需要选择其中一个,不能选择多个课程,求一周最多能上几节课本题要点:1、二分图最大匹配的模板题。左部的点表示课程号(1 ~ 300), 右部的点 表示上课的时间段 (1 ~ 84)。因为MaxN = 310, 直接用邻接矩阵来存储图, a[x][y] = 1 表示课程x 在时间段 y可以上课。2、然后套用 增广路算法来计算二分图的最大匹配。3、 第 p 天原创 2020-06-29 13:35:54 · 140 阅读 · 0 评论