
最短和最小生成树算法
加油
河林山
这个作者很懒,什么都没留下…
展开
-
堆优化Dijkstra()算法+spfa算法(模板)
题目链接题意:T组样例n个顶点,m条单向边m行 ui,vi,wi.求源点1到其它点来回最短路最后输出所有来回最短路相加之和0<n≤20000,m≤60000,1≤T≤10,0≤ci≤10^9,1≤ui,vi,wi≤n题解:单源最短路,且边权值为正数,n数据太大,邻接表存图。解法1:spfa算法解法2:堆优化Dijkstra()算法如何实现堆优化:不同结构体,用pair容器,pair可以放两个元素,相当于一个结构体,然后优先队列自动从小到大排序,排序先按pair中第一原创 2022-04-03 20:54:40 · 1396 阅读 · 0 评论 -
从Bellman_Ford到spfa(Bellman_Ford的队列优化)
题目链接代码1(超时):Bellman_Ford原始算法#include<bits/stdc++.h>using namespace std;const int N=20020;const int M=200020;const int INF=0x3f3f3f3f;int u[M],v[M],w[M];//边的信息 int dis[N];//源点到别的点最短路int n,m;void Bellman_Ford(){ memset(dis,INF,sizeof(dis))原创 2022-04-03 18:37:02 · 237 阅读 · 0 评论 -
多源最短路径Floyd-Warshall笔记
Floyd-Warshall算法:求任意两点之间的最短距离问题描述:——小哼准备去一些城市去旅游。为了节省经费以及方便旅程,小哼希望在出发之前知道任意两个城市之间的最短路程。算法原理:——动态规划思想,代码越看越迷。——大概思想:若使顶点 i 到顶点 j 的距离缩短,必须引入第三个顶点 k 进行中转才有,一旦缩短,立刻更新 e [ i ] [ j ](直接距离),中转点可能需要多个,但存在更新保存,相当于不断的寻找第三个顶点 k 。直接距离: i - > j间接距离: i - >原创 2020-11-19 20:19:44 · 150 阅读 · 0 评论 -
单源最短路(Dijkstra算法)笔记
Dijkstra算法——单源最短路——可用该算法求的一个点(源点)到其余各个顶点的最短距离。——例如,s,e1,e2,e3,e4。假定s是源点,利用Dijkstra算法可知s——e1的最短距离s——e2的最短距离s——e3的最短距离s——e4的最短距离要求:顶点与顶点之间的距离不能为负边可以无向边,也可以是有向边须知:松弛操作:是指利用源点再经过某点的状况下去缩短源点到其它点的距离。比如e[1][3]=10,e[1][2]=4,e[2][3]=1。单源最短路的思想:n个点原创 2021-03-29 16:29:54 · 285 阅读 · 0 评论 -
Silver Cow Party(单源最短路:单向边的来回最短路的运用)
题目提交链接One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1…N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1原创 2020-11-22 08:58:57 · 252 阅读 · 0 评论 -
Bellman-Ford算法笔记
Bellman-Ford算法解决的问题:n个顶点,m条边,分别求出源点到其它各点的最短距离。接下来就是m行边的数据a b c…代表顶点a到顶点b距离为c试用条件:边权值可正可负。可以是无向边或者有向边图内不能有负权环(环内存在边值为负),因为求出的最短路不正确。有正环暂时没发现求最短路有错误。但该算法可检测是否存在负权环。核心代码(4行):不断利用m条边更新最短路for(k=1;k<=n-1;k++) for(i=1;i<=m;i++) if(dis[原创 2021-04-23 16:28:24 · 410 阅读 · 0 评论 -
多源最短路+二分
题目:Travel Expense牛客提交链接邀请码:ayit606示例1输入3 21 22 331 2 51 3 52 3 2输出512题意:第一行:n,m接下来m行,表示u,v相连接下来Q次询问:s,t,b表示起点,终点,和手中的金钱。对于每次询问,需求出从s到t最多可带的东西数量。收费须知:假如你带k件东西,s到t为距离3应付综费:k + k * k + k * k * k。代码:#include<stdio.h>#include&原创 2021-05-05 10:53:34 · 128 阅读 · 0 评论 -
邻接表笔记
题目:ROADSvjudge提交链接题意:有n个点(编号为1,2,3…n),有m条单向路,每条路有相应的长度l,以及每条路的过路费t一个人要从1号点走到n号点,问在不超过花费mo的情况下最短路是多少。思路:利用邻接表去存每条边的信息然后利用dfs暴搜即可。构建邻接表:add(ss,dd,ll,tt);邻接表函数:void add(int x,int y,int ll,int tt){ nx[head]=first[x]; first[x]=head; l[head]=ll;原创 2021-07-25 20:22:12 · 239 阅读 · 0 评论 -
Stacks HDU - 6947(不是很理解,用邻接表解决)
转载:https://blog.youkuaiyun.com/yueshehanjiang/article/details/117717599题目:Stacksvjudge提交链接题意:有n个栈,编号从1到n,初始栈内只有元素 i ,现给出m条操作,每条操作a,b,a,b表示栈a中元素放入到栈b中(先进后出原则).最后输出每个站内元素数量和元素(从顶到底输出).题解:n,m范围1e5,模拟过程必定超时.代码:#include<stdio.h>#include<string.h&原创 2021-07-21 16:55:33 · 227 阅读 · 0 评论 -
Roadblocks(spfa+邻接表,双向边邻接表的构建)
vjudge提交链接题目Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She has decided to take the second-shortest r原创 2021-03-09 20:48:21 · 298 阅读 · 0 评论 -
单源最短路:bfs()+邻接表模板(邻接表2种方法构建)
题目:On Average They’re Purple牛客提交链接示例1输入3 31 31 22 3输出0示例2输入7 81 21 32 43 44 54 65 76 7输出3题意:——求1到n的最短路,再减1即可。题意可能不太容易明白,多琢磨琢磨。代码1:(vector容器构建邻接表)#include<stdio.h>#include<string.h>#include<algorithm>#inc原创 2021-05-05 10:30:24 · 182 阅读 · 0 评论 -
新的开始 LibreOJ - 10066(最小生成树模板)
新的开始 LibreOJ - 10066vjudge提交链接题意:——现已知各个矿井之间的输送电所需花费,但是需要再建一个发电站。该发电站需建在某个矿井上,已给出建在不同矿井上的花费。求所有矿井都能有电的最小花费。解题思路:——假设存在一个0号矿井,0号矿井到各个矿井之间的输电花费为p,即建立发电站的费用。现变为裸的最小生成树问题。代码1:(Prim)#include<stdio.h>#include<string.h>#include<algorithm&g原创 2021-05-30 17:29:46 · 206 阅读 · 0 评论 -
Jungle Roads (最小生成树(Prim)
题目:Jungle Roads-----------POJ - 1251vjudge提交链接题意:——n个村庄,村庄用大写字母A ~ Z表示。给出n-1行数据,每行按字母顺序排列的村庄标签开始。最后一个村庄没有排队。一个村庄的每一行都以村庄标签开始,然后是从这个村庄到后面字母表中带有标签的村庄的道路编号k。如果k大于0,则该线将继续显示k条道路的数据。每条道路的数据是道路另一端的村庄标签,然后是该道路每月维护成本。维护成本将是小于100的正整数。——求使n个村庄连通的最小费用。注意:保证原始道原创 2021-05-28 21:37:14 · 239 阅读 · 0 评论 -
符合最短路的最小生成树(总觉得名字起得很别扭)
提交链接题目描述:你知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度。城堡是树形的并且满足下面的条件:设 Di为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长度;而 Si为实际修建的树形城堡中第 i号房间与第 1 号房间的路径长度;要求对于所有整数 i (1≤i≤N),有 Si=Di 成立。你想知道有多少种不同的城堡修建方案。当然,你只需要输出答案对 2^31−1 取模之后的结果就行了。Input第一行为两个由空格隔开的整数 N,M;第二行到原创 2020-12-03 10:01:52 · 157 阅读 · 0 评论 -
ACM Contest and Blackout UVA - 10600(最小生成树和次最小生成树)
ACM Contest and Blackoutvjudge提交链接题意:——求最小生成树和次最小生成树,一定存在。t组样例n,m分别代表n个城镇,m条双向边下面m行边的信息。解题思路:并查集版: 最小生成树和次最小生成树模板——如何求:次最小生成树求出最小生成树,标记用了哪些边,被标记的n-1条边每次只有一个不用,再求最小生成树,会得到(n-1)个最小生成树的值,最小的一定是次最小生成树的值。——为什么。第一次求最小生成树,被标记的边一定都是最优的,如果有一条边不用,再原创 2021-05-30 17:45:45 · 183 阅读 · 0 评论