图论
文章平均质量分 55
收录和图相关的算法
小菜鸡加油吧
这个作者很懒,什么都没留下…
展开
-
AcWing 1738. 蹄球(基环树)
AcWing 1738. 蹄球 题意分析 把每一个牛都看图中的点,把牛和另一个传球对象之间看成一条边, 这么来想的话 图中会出现环,并且环的长度必定是两个顶点 图中每个点的入度最小为零(顶点的两头牛),最大为二(左右都给他) 然后图中就会出现两种环 一种是不带树的环,一种是基环树 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namesp原创 2022-02-07 17:59:23 · 584 阅读 · 0 评论 -
AcWing 4216. 图中的环(基环树)
基环树,并查集原创 2022-01-29 22:03:56 · 585 阅读 · 0 评论 -
对最小生成树的认识及模板题
前言 这几天对’ 树 '这个词从新认识了一下,之前一直有听说过,但是很显然,仅仅是听说。。 文章目录: 文章目录:1. 树到底是个啥2. 最小生成树又是什么3. 最小生成树的两种算法3.1 prim算法3.2 kruskal算法4. 一些模板题 1. 树到底是个啥 通俗来讲,就是所有顶点都由一些边从而连在了一起,但是不包含回路的图 2. 最小生成树又是什么 我们知道上述树的生成是由很多点和边组成的,所以有可能因为边的不同会出现不同的树,现在如果每条边都有不同的权值,那么最小生成树就是所有树中所有的原创 2021-08-06 20:12:32 · 169 阅读 · 0 评论 -
邻接表以及其算法应用(优化图的存储)
邻接表是什么 邻接表是一种存储图的链式存储结构,和邻接矩阵功能一样。 假设一个双向图 我们如果用邻接矩阵储存就会是这样(没有连接的我们认为权值是inf) 0 6 inf inf 4 6 0 8 inf inf inf 8 0 2 3 inf inf 2 0 inf 4 inf 3 inf 0 我们这时候会发现,邻接矩阵会浪费一些空间,也就是没有连接的边,他也会存入一个最大值 假如用邻接表储存呢? 首先邻接表由两个主要的部分组成 头节点:用来储存节点编号 表节点:用原创 2021-08-12 17:30:26 · 602 阅读 · 0 评论 -
POJ 3259 Wormholes(弗洛里德)(SPFA邻接表)
题目 While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ’s farms原创 2021-08-13 18:32:06 · 90 阅读 · 0 评论 -
AcWing 340通信线路(dijkstra+二分法找答案)
题目 在郊区有 N 座通信基站,P 条 双向 电缆,第 i 条电缆连接基站 Ai 和 Bi。 特别地,1 号基站是通信公司的总站,N 号基站位于一座农场中。 现在,农场主希望对通信线路进行升级,其中升级第 i 条电缆需要花费 Li。 电话公司正在举行优惠活动。 农产主可以指定一条从 1 号基站到 N 号基站的路径,并指定路径上不超过 K 条电缆,由电话公司免费提供升级服务。 农场主只需要支付在该路径上剩余的电缆中,升级价格最贵的那条电缆的花费即可。 求至少用多少钱可以完成升级。 输入格式 第 1 行:三个整原创 2021-08-12 18:25:11 · 157 阅读 · 0 评论 -
hdu1839 Delay Constrained Maximum Capacity Path
题意分析: 有一个矿洞工人在这里挖矿物,要送到一个工厂里面,从矿洞到工厂有很多条不同的路,但是每条路的承重都不一样,而且如果在时间t之前没有送到工厂那么矿物就会消失,让你求找到一条承重最大的路并且保证不会超时让矿物消失。 解题思路: 根据题意可以看出来,这是由两个约束条件组成的最短路,一般这种题我们都是用到二分法来完成其中一个约束条件,这里我是先用最短路求出来最短时间,然后将承重排列,二分法找到符合时间的答案。 错误分析: 用邻接表存图的时候,忘了把承重存入,导致结果一直是0。 AC代码: #include原创 2021-08-14 19:22:49 · 123 阅读 · 0 评论 -
【KM算法】奔小康赚大钱 HDU - 2255
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。 另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老百姓都比较富裕,他们都能对每一间房子在他们的经济范围内出一定的价格,比如有3间房子,一家老百姓可以对第一间出10万,对第2间出2万,对第3间出20万.(当然是在原创 2021-09-12 14:27:28 · 92 阅读 · 0 评论 -
棋盘游戏 HDU - 1281
小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gard原创 2021-09-12 14:17:33 · 184 阅读 · 0 评论 -
POJ - 1860 货币兑换(bellman)
题目: 传送门 我们城市有几个货币兑换点。让我们假设每个点专门研究两种特定的货币,并且只与这些货币进行兑换操作。可以有多个点专门用于同一对货币。每个点都有自己的汇率,A到B的汇率就是1A得到B的数量。此外,每个交换点都有一些佣金,即您必须为交换操作支付的金额。佣金始终以来源货币收取。 例如,如果您想在兑换点将 100 美元兑换成俄罗斯卢布,汇率为 29.75,佣金为 0.39,您将获得 (100 - 0.39) * 29.75 = 2963.3975RUR。 您肯定知道在我们的城市中您可以处理 N 种不同的原创 2021-07-29 23:06:40 · 290 阅读 · 0 评论 -
HDU Today HDU - 2112(map)(dij)
题目: 传送门 Input 输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000); 第二行有徐总的所在地start,他的目的地end; 接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。 note:一组数据中地名数不会超过150个。 如果N==-1,表示输入结束。 Output 如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。 Sample Input 6 xiasha westlake原创 2021-07-29 00:04:05 · 82 阅读 · 0 评论 -
一个人的旅行(dij最短路)HDU - 2066
题目: 传送门 Sample Input 6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10 Sample Output 9 题意分析: 因为题目上说草儿家没有交通工具,要到隔壁城市才有,这时就默认了草儿到隔壁城市的路程为0,如果草儿家有多个隔壁城市,那么这个题就是多源最短路了,有多少个隔壁城市就得跑几遍迪杰斯特拉,很容易TEL,这时候我们可以将草儿的家设成一个超级原点,找到到各个城市的最短路径 #include<iostream> #原创 2021-07-28 23:53:02 · 101 阅读 · 0 评论 -
MPI Maelstrom (最短路dij)POJ - 1502
题目: 传送门 Sample Input 5 50 30 5 100 20 50 10 x x 10 Sample Output 35 解题思路: 将题中给的三角图转换成完整图存入 因为图中含有数字和字符所以就用到了atoi函数,比较放便一些 #include<iostream> #include<cstring> using namespace std; const int N=100+5; const int inf=1e9; int m[N][N]; int dis[N]原创 2021-07-28 23:42:42 · 84 阅读 · 0 评论 -
昂贵的聘礼 POJ - 1062
题目: 传送门 Input 输入第一行是两个整数M,N(1 <= N <= 100),依次表示地位等级差距限制和物品的总数。接下来按照编号从小到大依次给出了N个物品的描述。每个物品的描述开头是三个非负整数P、L、X(X < N),依次表示该物品的价格、主人的地位等级和替代品总数。接下来X行每行包括两个整数T和V,分别表示替代品的编号和"优惠价格"。 Output 输出最少需要的金币数。 Sample Input 1 4 10000 3 2 2 8000 3 5000 1000 2 1 4原创 2021-07-28 23:34:25 · 104 阅读 · 0 评论 -
反着来
题目描述 相信大家都会解决有向图的最短路问题。这次我们反着来,给你一个有向图中每一对顶点之间的最短路的长度,请你计算出原图中最少可能包含多少条边。 输入 输入的第一行是一个整数T(T<=10),表示有T组测试数据。 每组输入的第一行是一个整数N(1<=N<=100),表示顶点个数。 接下来N行,每行输入N个整数,这些整数都小于10000。 第i行的第j个整数表示从顶点i到顶点j的最短路的长度。 第i行的第i个数字一定是0,其他的数字都大于0。 输出 对于每组输入,先输出“Case k: ”原创 2021-05-20 22:59:31 · 64 阅读 · 0 评论