图
文章平均质量分 58
图
Cu1ii*
平凡的铁匠
展开
-
第k短路(A*)
题目链接Remmarguts’ Date如果不了解A*算法可以先去看一下 由A*算法可以直到,当目标点第一出优先队列时,一定是最优解,所以当目标点T第k次出队时,就是第k短路,这是可以用反证法证明的: 假设这是第m次出队(m > 1) ,那么这一次出队是当前所有解中最优(A*性质),所以假设此次路径短于第m - 1次出队长度,显然上一次出队的值应该就是此次出队的值,与假设不符,故该路为第m短路h(x)就可以采用终点到各个点的最短路作为启发式函数,因为可以保证在找第k短路的过程中某点到终点的原创 2021-01-26 18:11:06 · 264 阅读 · 0 评论 -
次短路径
文章目录次短路径求次短路的方式1、起点终点各跑一遍最短路,然后枚举中间点2、边更新最短路边记录次短路次短路径求次短路的方式 顾名思义,就是除最短路最外的最短路径,求次短路的方法一般有两种,第一种是从起点跑一遍最短路,终点跑一遍最短路,然后枚举中间点,第二种则是在求最短路时顺便去维护次短路,下面将分别进行详细说明下面代码都是以poj3255作为例题传送门1、起点终点各跑一遍最短路,然后枚举中间点 先说一个结论,节点x到节点y的次短路可以看作min( mindis(x,k1) + length(k原创 2020-12-17 12:04:11 · 1971 阅读 · 3 评论 -
Improve SPAM(拓扑+BFS)
Improve SPAM题意给你一个有向图,N个点中有1-L个为发送点,剩下的为接收点。点1发送一封邮件给他相邻的点,其他的点接着发送,可能会收到多封邮件,每封发送。问接收点一共接收到了多少封邮件,以及多少个接收点收到了邮件。思路建图,跑一遍bfs可以求出能到达几个接收点,同时优化得到一个连通图。每个接受点受到的邮件数目等于所有上一级发送的邮件数目之和。所以跑一遍拓扑排序即可,每次更新该点可以接收邮件数目ci[edge[i].to] = ci[p] + ci[edge[i].to]code#i转载 2020-11-12 20:07:13 · 89 阅读 · 0 评论 -
欧拉回路的判定和求解
欧拉回路的判定1无向图 无向图:连通(不考虑度为 0 的点),每个顶点度数都为偶数。hdu 1878ac代码#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <string>#include <cmath&g原创 2020-10-14 15:06:17 · 645 阅读 · 0 评论 -
poj 1988 Cube Stacking(带权并查集)
Cube Stacking题意:农夫John和Betsy在玩一个游戏,有N(1≤N≤30,000)块相同的立方,标记从1到N。开始时是N个栈,每个栈只有一个立方体。农夫John请Betsy执行P(1≤P≤100,000)个操作,有两类操作:move和count。在一个move操作中,农夫John请Bessie将包含立方体X的栈移到包含立方体Y的栈的栈顶。在一个count操作中,农夫John请Bessie计算包含立方体X的栈中在X下的立方体个数,并返回值。请您编写一个程序返回游戏结果。思路原创 2020-07-21 20:57:36 · 198 阅读 · 0 评论 -
食物链 poj1182 并查集
食物链题意很简单,就是当时忘记x吃y那么y的猎物也能吃x了#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 5 * 1e4 +5;//x+n为x的捕食者,x+2*n为x的猎物int f[4 * maxn];void init(int n){ for(int i = 1; i <= 4 * n; i++原创 2020-07-21 15:39:26 · 117 阅读 · 0 评论 -
Find them, Catch them 并查集poj1703
题目链接Find them, Catch them 题意:刚开始看起来挺简单,但是我越看越觉得绕。。D [a] [b]其中[a]和[b]是两个犯罪分子的编号,他们属于不同的帮派;A [a] [b]其中[a]和[b]是两个犯罪分子的编号,您要确定a和b是否属于同一帮派。但是这里要清楚只有两个成员所属帮派都互为对立时,才能说属于两个不同帮派这里因为有对立帮派的原因,我们做一个映射,我们规定a + n 为a 成员所属帮派的对立帮派在D操作时,要注意,对于输入的ab 我们要把a和b的对立帮派进行原创 2020-07-21 14:50:43 · 171 阅读 · 0 评论 -
hdu3499 Flight
题目链接hdu3499Flight思路:还是跑一遍正图一遍反图,我们不能确定哪一条边半价后价格最低,所以我们要穷举所有的边i->j,然后将该边的权值除二之后,将开始点到i的最短路加上终点到j的最短路的值进行比较,求出最小值。#include <iostream>#include <string>#include <cstring>#include <map>#include <queue>using namespace std原创 2020-07-07 22:11:57 · 110 阅读 · 0 评论 -
Jzzhu and Cities CodeForces - 449B
题目链接思路在于,先跑一遍最短路并记录到每一个点最短路的条数,如果铁路长度小于该点最短路,那么一定可以删除,如果等于,就要特判是否该铁路是唯一最短路。总的来说,不是很难,但是细节太重要了!!!#include <iostream>#include <queue>#include <cstring>#include <vector>#include <cstdio>using namespace std;typedef long原创 2020-07-06 21:29:07 · 137 阅读 · 0 评论 -
补 ICPC Pacific Northwest Regional Contest 2019 C Coloring Contention 最短路
题目链接 Coloring Contention这个题,没看明白,后来才知道是最短路的变形。。思路: 因为Alice 想要Bob走变换次数最多的路,那么她之间将所有相邻的路都图成不同颜色,在这种情况下,Bob只需要走图中的最短路即可,那么变换颜色的次数就是最短路 - 1 。求最短路的意图明确了,但是数据给的1e5的数量,正常的邻接图内存会爆掉,所以需要链式存储,同时只有用spfa或者Dij...原创 2020-05-06 01:43:29 · 354 阅读 · 0 评论 -
poj 3286 Silver Cow Party
题目链接Silver Cow Party思路:因为路是单向的,所以可以把x当起点,来时的路当边,求出x到各个农场的最短距离,然后将矩阵逆转,将回去时的路当边再求一遍,这样就可以算出从x回到各个农场的最短路。再将两个距离加起来然后循环比较出最大值。/*Dijkstra算法 单源最短路径,不能处理负值权*//*flag = 0表示存储去各个农场去x时的最短路,flag = 1 表示存储x回各个...原创 2020-04-22 21:22:58 · 146 阅读 · 0 评论 -
最短路基础
关于各种算法的分析,这篇文章讲的很清楚,包括优化等问题。文章链接下面是我对算法的一些个人理解和我自己学的时候的疑惑的解释。(目前只学会了最朴素形式的Dijkstra算法,其他的过几天再更)Dijkstra 算法(类似最小生成树的prim算法)将起点的距离设为0,然后进行n次循环,每次先找到到起点距离最短的点u,再将该点作为中转点,更新与其链接点到起点的最短距离,如果之前与其链接的点与起点的...原创 2020-04-22 15:34:13 · 246 阅读 · 0 评论 -
poj 1258 Agri-Net
poj 1258 Agri-Net这里,本来是用prim算法更好一点,但是,emmm,确实还没有掌握该算法的具体实现步骤,所以先使用了Kruskal算法进行求解,对于这类图的问题,需要先转化成两点之间线路的形式进行存储后再使用Kruskal算法进行求解。#include <iostream>#include <string.h>#include <algor...原创 2020-04-16 00:59:57 · 108 阅读 · 0 评论 -
poj 2395 Out of Hay
poj2395 Out of Hay这里是求最短路径中的最大边,确实刚开始看。。有点迷,但是跟一般的最小生成树题目没有太大差别,就是在求最小生成树的时候每一次相加边的时候都把较大的那个留下来,就可以得到最短路径上的最大边#include <iostream>#include <algorithm>#include <cstdio>using names...原创 2020-04-16 00:41:31 · 172 阅读 · 0 评论 -
最小生成树算法 入门基础
最小生成树概述在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称Kruskal算法简述假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构...原创 2020-04-16 01:01:40 · 329 阅读 · 0 评论 -
Hdu 1863(畅通工程/继续畅通工程)(Kruskal算法)
题目链接:(http://acm.hdu.edu.cn/showproblem.php?pid=1863)使用最小生成树算法中的Kruskal算法代码如下#include <iostream>//hdu1863#include <algorithm>using namespace std;struct Edgenode{ int from;//起始点...原创 2020-04-15 03:11:32 · 189 阅读 · 0 评论 -
hdu 4857 拓扑排序,例题
逃生Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6725 Accepted Submission(s): 1965Problem Description糟糕的事情发生啦,现在大家都忙着逃命。但是逃命的通道很窄,大家只能排成...转载 2020-04-10 21:11:49 · 161 阅读 · 0 评论 -
Rank of Tetris (拓扑排序+查并集)hdu 1811
题目链接思路:大于号和小于号处理就等价于方向路径,但是 ‘=’ 则要进行特殊处理,这里使用查并集的方法,对数据进行预处理,将所有相等的点收缩成一个点,再将新构成的点,进行拓扑排序,若是不能进行拓扑排序,那么直接输出“CONFLICT”,若是可以进行拓扑排序,但是有两个及以上的入度为0的点,则输出“UNCERTAIN ”,其余情况,输出“OK”;一些细节问题将在代码中进行陈述。#include ...原创 2020-04-10 19:35:54 · 148 阅读 · 0 评论 -
Legal or Not(拓扑排序)...
题目链接思路很清晰,就是利用拓扑排序,若是n个数被全部排序,那么就不构成环,反正则构成了环,即为不合法,但是我这里想不明白,为什么用二维数组来记录两点之间路径的方向和vector 进行记录有何区别,希望有大神指点。这个是ac代码#include <iostream>#include <vector>#include <queue>#include &...原创 2020-04-08 21:53:03 · 262 阅读 · 0 评论 -
拓扑排序hdu 1285
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。由...原创 2020-04-07 12:59:57 · 128 阅读 · 0 评论 -
The Suspects poj 1611
DescriptionSevere acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best stra...原创 2020-04-06 15:47:36 · 140 阅读 · 0 评论 -
并查集
例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是...转载 2020-04-06 03:11:24 · 198 阅读 · 0 评论