
图论
学习图论基础
S atur
要变成萤火虫~
展开
-
L2-001 紧急救援 (最短路Dijkstra的扩展 - 最短路径数&路径最大权值)
思路: 菜蒟只会求最短路,不会扩展/(ㄒoㄒ)/~~。参考博客代码实现:#include<bits/stdc++.h>#define int long long#define endl '\n'using namespace std;const int N = 510;int n, m, s, d;int ans, u, v, w;int g[N][N], c[N]; //邻接矩阵存边, c[i]表示第i个城市的救援队数量int dis[N], path[...原创 2022-04-21 12:14:07 · 228 阅读 · 0 评论 -
1002.Kanade Loves Maze Designing(路径上的边种类数 / dfs暴力搜索) (2021“MINIEYE杯”中国大学生算法设计超级联赛4)
传送门题意:一个无向树形图上每个点都有其自己的权值 c[i], 给出第 i(2<=i<=n) 个点直接相连的点 p[i],现在需要求 f(i, x)的值并分别对1e9+7和1e9+9取模输出答案。思路:建立无向图后,每次以第 i 个点为根节点进行暴搜,得到a[i][j]的值,然后再求对应的 f(i, x)即可。暴搜时复杂度为 O(n*(n-1)),结果处理时复杂度O(n^2),题目5000的数据范围是能够通过滴。代码实现:#include <cstdio>..原创 2021-07-29 23:27:35 · 195 阅读 · 0 评论 -
HDU Ice_cream‘s world I (并查集判环)
传送门题意:给出yi'g原创 2021-05-28 01:45:09 · 136 阅读 · 0 评论 -
H.On Average They‘re Purple(最短路裸题)(2021年度训练联盟热身训练赛第一场)
传送门思路:题目需要寻找 Bob 不得不改变的最小最大次数,即相当于找 1 到 n 最短路径,算是非常裸的题了。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x) (x &(-x))#defin原创 2021-04-19 19:27:29 · 199 阅读 · 0 评论 -
J. 天空之城 (并查集求最短路) (2021牛客寒假算法基础集训营6)
传送门思路:根据题意显然知道可以利用并查集来求解,如若所有城市都在一个集合内,则表明能通往每个城市。该题明确说明走过的路再走不会再花时间,那么利用并查集再简单不过,只不过在最开始选择路径时需要选择耗时最少的路,因此我们可以利用一个结构体排序来筛选一下。(注意备注里有提到该题时多组输入题型。)代码实现:#include<bits/stdc++.h>//#define endl '\n'#define null NULL#define ll long lon.原创 2021-03-06 10:50:23 · 190 阅读 · 0 评论 -
I. 贪吃蛇 (bfs迷宫) (2021牛客寒假算法基础集训营6)
传送门思路: 这就是个很典型的bfs迷宫题,没啥好说的直接上代码。利用了结构体的代码:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x) (x &(-x))#define ls(x) x<<.原创 2021-03-05 23:16:05 · 298 阅读 · 0 评论 -
Codeforces1401D Maximum Distributed Tree (树dfs & 贪心)
传送门题意: 给出一棵n个点的树,想让给每条边赋值,使得所有边权的乘积为k。因为k非常大,所有将k拆分成m个因子,换而言之就是n-1条边权的乘积得等于m个因子的乘积。定义f(x, y)为点x到点y的简单路径所经过的所有边的权值和,现问怎么安排边权,才能让所有简单路径的 f 值和 (即下图所示公式)最大,并得到该max值。思路:若m < n-1,那么剩下的边用1来填充。dfs找到每条边的经过次数,然后贪心一下将大的因子赋值给经过次数最多的边贡献就最多。至于经过次数的计算,可以将 u -原创 2020-09-02 23:22:02 · 179 阅读 · 0 评论 -
Codeforces D Rarity and New Dress (二维dp & 菱形寻找)
传送门题意: 给出n*m的矩形,相同字符的表示同一种颜色,找出矩阵中有多少个斜正方形(如下图所示)。思路:设dp[i][j]表示(i,j)为止以上能最多得到的"斜正方形",答案就是所有位置的dp值之和。而对于位置(i,j),只需要考虑(i-1,j-1),(i-1,j),(i-1,j+1),(i-2,j)位置是否与其同色。若同色则(i,j)位置构成一个图形,直接dp[i][j]=1。反之就dp[i][j] = min(dp[i-1][j-1],dp[i-1][j+1],dp[i-2][j])+原创 2020-08-30 00:04:48 · 199 阅读 · 0 评论 -
Codeforces E1. Weights Division (easy version) (树dfs & 边的利用次数)
传送门题意: 给定一棵以 1 号点为根的带权有根树。每次可选择一条边将其边权除以2(下取整),试问至少经过多少次选择,才能使得所有根节点到叶子节点的路径权值和不超过S?思路:利用有限队列每次选择权值最大的边处理,直到sum <= S。(我只想得到这么多了,莫得法太菜了呜呜呜。细节部分还一直处理不好,嗐。)看了大佬博客才知道,原来还得将经过次数和权值分别存取,如果直接存cnt*val会有错(这个在大佬2博客中有提到)。大佬1博客代码比较简洁清晰,大佬2博客思路比较详细。代码实现:#i原创 2020-08-29 22:47:42 · 180 阅读 · 0 评论 -
Codeforces E. Tree Queries (树 & dfs & 特定路径判断)
传送门题意: 给你一个以 11 为根的有根树。每回询问 k 个节点v1 ,v2 ⋯vk。求出是否有一条以根节点为一端的链使得询问的每个节点到此链的距离均≤1.只需输出可行性, 无需输出方案.思路:这棵树以 1 为根,那么,这条路径要么经过给定点,要么经过给定点的父亲,要么经过给定点的至少一个儿子。这时我们发现,经过以上三种点都必须经过给定点的父亲,于是我们就把题面转化为了:给定若干个点,求是否有一条从 1 开始的路径经过这些点。按照深度排序后依次判断后一个点是否在前一个点的子树内即可。原创 2020-08-23 00:26:20 · 200 阅读 · 0 评论 -
Codeforces C. Uncle Bogdan and Country Happiness (树型递推)
传送门题意: 给出一颗根节点为 1 的树,对于每个节点 i,有 p[i] 个人的家在节点 i 上。一开始所有人都在根节点上,然后每个人会往家沿着最短路走。每个人出发时有一个心情,可能是好心情也可能是坏心情,在经过一条边时,心情可能由好变坏,但是不可能由坏变好。每个点有一个幸福检测器,最后的检测结果为:所有经过该节点的人中,好心情的人数减坏心情的人数。现在给出每个 h[i] ,问有没有可能最后每个节点的检测结果恰好为 h[i] 。思路:刚开始看完题就一头懵,有点点思路但还是太菜,码力不得行啊。原创 2020-08-22 21:26:12 · 214 阅读 · 0 评论 -
Codeforces D. Maximum Distributed Tree (树dfs & 边的利用次数)(Round #665 Div.2)
传送门题意: 给出一棵n个点的树,想让给每条边赋值,使得所有边权的乘积为k。因为k非常大,所有将k拆分成m个因子,换而言之就是n-1条边权的乘积得等于m个因子的乘积。定义f(x, y)为点x到点y的简单路径所经过的所有边的权值和,现问怎么安排边权,才能让所有简单路径的 f 值和 (即下图所示公式)最大,并得到该max值。思路:比赛的时候相叉了,后面快结束了才行到 idea, 但对树的相关操作不熟就这么错过了上高分分的机会,呜呜太菜了~若m < n-1,那么剩下的边用1来填充。dfs找原创 2020-08-22 19:48:02 · 233 阅读 · 0 评论 -
Codeforces E. Tree Painting (树形dp & 换根)
传送门题意: 给定一棵有 n 个结点的无根树,所有结点都是白色的。第一次操作可以随意使一个结点染成黑色,之后每次操作可以使一个与黑色结点相邻的白色结点变成黑色。每次操作可以获得的权值为被染成黑色的白色结点所在的白色连通块的结点数量。求可以获得的最大权值。思路:最开始我以为选哪儿都一样,都是n到1的和,后面才知道是俺太菜了。只要确定第一个黑点后权值就确定了,所以这就是个选择根节点的树形dp题。但显然如果要每个节点都dfs求答案绝对超时,于是需要推算下换根公式预处理下。这里可以参考大佬博客,讲得原创 2020-08-21 22:26:41 · 324 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)
传送门思路:所谓LCA即两点的最近公共祖先,暴力的思维当然是一步一步往上爬寻找相交的第一个祖先,但这么暴力显然会超时。这个时候就可考虑以2的倍数来加速向上爬,且是从……32,16,8,4,2,1这样从大往小的选择跳跃步数(这样方便对大数悔棋)。大概操作即先爬最深的点x,让x与y位于同一深度时再开始一起往上爬。首先要记录各个点的深度和他们 2^i 级的的祖先,用数组d表示每个节点的深度,用 fa[i][j] 表示节点 i 的 2^j 级祖先。具体思路操作参考大佬博客,真的超详细,超nice!原创 2020-08-21 01:26:52 · 175 阅读 · 0 评论 -
Codeforces E. 1-Trees and Queries (树 & LCA & 定长路径)
传送门题意: 给定一个含有n个节点的树(相邻两点间的距离为1),以及q个询问。每一个询问给出5个整数:x,y,a,b,k。指如果像树中的x节点和y节点之间加一条边,问是否存在一条路径从a到b长度为k的路径?(注:每一次询问添加的边不会互相干扰,即只在该次询问有效)思路:首先我们看a与b之间的连通性,有三种有意义的最短路径L:a -> b,即不需要x与y之间的边a和b也能连通,距离记录为dist_ab。a -> x -> y -> b,记作dist_axyb。a原创 2020-08-21 00:37:09 · 218 阅读 · 0 评论 -
Codeforces E Necklace Assembly (暴力 / 循环因子)
传送门题意: 店铺里有n颗珠子,现让你串一条最长的项链,满足将项链逆时针旋转 k 个位置后依然和原位置一样(被定义为k-beautiful项链)。思路:首先最小的答案是最大的字符个数,然后考虑项链中字符不全相等的情况。如果环转k的因子次是美的,那么k次也一定是美的,那么k也一定是美的。设某个字母有x个,x/循环节个数就是该字母能填充的循环节长。把所有字母填充的循环节长加起来,如果大于循环节长度就是符合的。代码实现:#include<bits/stdc++.h>#define原创 2020-08-19 23:30:20 · 252 阅读 · 0 评论 -
Codeforces E. Polygon (思维 / 判断)
传送门题意: 对于一个n* n的一个全为0的初始矩阵,矩阵上方和左侧均有一排炮台,矩阵的下侧与右侧是边界。炮台可以发射子弹,子弹只能直线行走,且遇到边界后会停止,遇到一个停止的子弹也会停止,子弹停止后的坐标里面的值记为1。现给出一个结果矩阵,试问是否可以由初始矩阵(全为0)通过炮台打出来;能则输出“YES”,否则输出“NO”。思路: 很简单的思维题,显然对于边界上的炮弹是一定可以打到的,而对于中间的炮弹必须满足其下方或右侧有停留的炮弹即可。代码实现:#include<bits/stdc+原创 2020-08-19 21:43:05 · 320 阅读 · 0 评论 -
Codeforces F. Maximum White Subtree (树形dp)
传送门题意: 给定一棵 n 个节点无根树,每个点都有一个颜色,非黑即白。现在问对于每个点 i 而言,选出一个 包含i的 连通块,使其白色点与黑色点的个数差最大(注意不是绝对值)。1 ≤ n ≤ 2e5 ,0 ≤ a[i] ≤ 1 (a[i]为0表示黑色,为1表示白色) 。思路:因为我们需使cntw-cntb尽量大,可设定每个白色节点贡献值为1,黑色节点贡献值为-1。这样就转换成两次dp求出最大子连通块的权值和,分别为自底向上和自顶向下。自底向上的话可直接维护dp[ i ],表示以点 i 为根原创 2020-08-19 00:02:52 · 246 阅读 · 2 评论 -
Codeforces C. Ehab and Path-etic MEXs (树 / 构造 / MEX)
传送门题意: 给定一个 n 个节点 n−1 条边的树,要求给边重新标注边权,分别为 0,1,2…n-20,1,2…n−2 。然后使得树上任意两点 u,v的 MEX(u,v) 的最大值最小。MEX(u,v) : u 到 v 的简单路径没有出现的自然数中最小的数。思路:当这棵树是一条链时,便可随机构造,ans(min)都是n-2。会发现无论如何构造,边权为 0,1 的两条边总能出现在某条路径上;所以我们只需要考虑如何使得边权为 0,1,2 的三条边不同时出现在某一路径上。因为当这棵树不为一条链时原创 2020-08-18 22:32:37 · 289 阅读 · 0 评论 -
Codeforces D. Cow and Snacks (并查集 / dfs)
传送门题意: 现有n 种花,k 个客人,每个人喜欢两种编号不同的花。但是每种花在花店里只有一束。客人将按一定顺序进入花店买走所有她喜欢且仍在店铺里的花。如果一个客人买不到任何一束花,那么她就会十分沮丧导致变成肥宅。现在你可以自己安排这 n 个人的顺序,使得肥宅的数量最小。思路:将两种花看做点,把客人看做连接两个节点的边,以此建图来具体化问题。对于一个含x个节点的连通块,总有一个边会占据两个点,那么便一定能以一定顺序最多满足x-1条边有点可分配。那么对于所有n个点,若有c个连通块,便会产生c个原创 2020-08-18 19:04:28 · 263 阅读 · 0 评论 -
Codeforces A. String Transformation 1 (字符串构造 / 并查集)
传送门题意: 给出两个(由前20小写字符组成的)字符串a和b,每次你可选择a中几个某一类字符x,将其变成字符y(要求y > x),试问最少需要多少次操作才能将字符串a变成b。思路:第一个样例 aab和bcc,由于第一个a要变成b,第二个a要变成c第二个a要变成c,第三个b要变成c第三个b要变成c,原则上是需要三次操作;但是由于a−>b,b−>c,所以a−>c的步骤就不需要了。这意味着如果合并的两个字母不在一个集合中,才需要额外操作,所以我们直接用并查集维护下即可。代码原创 2020-08-17 22:54:47 · 258 阅读 · 0 评论 -
Codeforces D TediousLee (规律 / 树型递推计数)
传送门题意: 给你一个建树规则:级别1的有根死灌木是单个顶点。为了构造级别i的RDB,首先,我们构造级别i-1的RDB,然后对于每个顶点u:如果您没有孩子,那么我们将添加一个孩子;如果你有一个孩子,那么我们将增加两个孩子;如果您有一个以上的孩子,那么我们将跳过它。若出现含四个节点的根树(claw,如下图),且该四节点的爪子上的点都是绿色,则可将其都标记为黄色。先给出n级别的树,试问最多能标记多少个黄色节点?答案对1e9+7取模。思路:其实推到5级别树便会发现一定规律,每个节点都可作原创 2020-08-17 20:39:48 · 230 阅读 · 0 评论 -
Codeforces A. Johnny and Contribution(思维 / 拓扑排序)
传送门题意: 给定一张 n 个点 m 条边的图。你需要给每个点写上数字,其数字为所有与它相邻且被写上数字的点中没出现过的最小的正整数。请求出一种写数字的顺序使得编号为 i 的点上的数字为给定序列p[i]。无解直接输出 -1。思路:对于i号点必须满足与它相邻的数必须包含[1,p[i]),且不包含p[i]才能有解。如果满足上述条件,则按照 p序列 从小到大写数字就是一个符合条件的顺序。不过也可以用拓扑排序来写。代码实现:#include<bits/stdc++.h>#defin原创 2020-08-16 22:33:01 · 447 阅读 · 1 评论 -
Codeforces A.Linova and Kingdom (树的深度 / dfs)
传送门题意: 给你一棵n个节点的树,试标记其中k个节点为工业区,剩下的为旅游区,使得所有工业区走到1号根节点所经过的旅游区数量max。思路:将深度最大的k个节点标记为工业区即可。s[u]表示u节点子树上节点的数目。d[u]表示u节点的深度。排序找到d[u]-s[u]最大的k歌节点即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define i原创 2020-08-16 21:12:53 · 181 阅读 · 0 评论 -
Codeforces C Anna, Svyatoslav and Maps (floyd最短路 & 贪心)
传送门题意: 题意有点复杂,现有n个点的有向无权图,给出一条路径p。试问是否可以去掉p序列中的部分点,使得剩余序列所经路径依旧是原路径(长度不变)。思路:由于数据范围比较小,可以直接floyd处理。每次找到给定路径上终点到当前点的最短路,如果最短路小于给的路径的长度,那么把路径上该点的上一个点加进去。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#de原创 2020-08-15 22:50:22 · 169 阅读 · 0 评论 -
1010.Lead of Wisdom (dfs / 暴力求和) 2020 Multi-University Training Contest 2
传送门思路:题意: 给出 n 个技能,每个技能有 4 个属性: a , b , c , d ,每个技能属于一个分类,最多有 k 个分类,每个分类的技能只能学一种,假如最后选定的技能集合为 S,最终可以造成的伤害为题中所给公式。求最大的伤害为多少?直接DFS递归求出一类技能的伤害值并取个max即可,最复杂的情况就是 2^15 次,最多也就不过千万级。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL原创 2020-07-31 23:25:03 · 204 阅读 · 0 评论 -
C. Operation Love (几何判断 / 叉积判点) 2020牛客暑期多校训练营(第三场)
传送门思路:题意需要判断给出的几何图形是左手还是右手(给出的点序可逆时针可顺时针)。思路很简单,就是先找到第边(最长边),然后利用叉积判断小拇指或大拇指与边的位置关系即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowb原创 2020-07-23 12:02:12 · 199 阅读 · 0 评论 -
Codeforces E.Directing Edges (拓扑排序/构造有向图) (Round #656 Div.3)
传送门题意: 给出一个图的m条边,属性为1表示有向边,属性为0表示无向边。试问是否可确定所以无向边的方向,使图变成一个没有环的有向图?若无可行方案输出"NO",反正输出"YES"并输出原无向边确定的方向。思路:若原图就已经成环,那么必然输出NO,否则就一定可以构造出可行解。考虑原图的拓扑排序,根据两点的进队时间,对于某一无向边,只要使边上两点进队时间也满足拓扑序,就可以使得图依旧无环。具体看代码,详细思路可参考这篇博客。代码实现:#include<bits/stdc++.h>原创 2020-07-18 23:08:22 · 341 阅读 · 0 评论 -
Codeforces D. a-Good String ( dfs / 暴力) (Round #656 Div.3)
传送门题意: 字符串如果长度=1 并且为’a’ ;当长度>1时, 需要满足一半全是a,另一半必须为b-good 字符串 ,依次类推下去,这就是 a -good 字符串。你可以选择某个字符并将它改变,题目需找到最小的选择数使得初始字符串变成一个a - good。思路:比赛的时候想成二分+递归判断被卡了一个小时,呜呜呜太菜了。看了别人的题解才知道原来直接dfs所有的情况,计算出不同的字符数再求个min就好。详情看代码,不过还有一种暴力搜索的解法。代码实现:#include<bi原创 2020-07-18 15:35:39 · 225 阅读 · 0 评论 -
C - 璀璨光滑 (bfs & 排序贪心 & 二进制位运算) (牛客算法周周练15)
传送门题意: 有一张2n个点的无向图,这个图上每个点标上了0到2 ^ (n-1)之间不同的数字。记pi为第i个点的标号,那么u和v之间连边当且仅当pu与pv的二进制表示恰好有一位不同。现在告诉了你这张图,但是每个点的标号不见了,请找到一个字典序最小的标号方式,即先比较p1,如果相同的话比较p2,依次类推。思路:输出2 ^ n个不同的数——说明每个点的标号都能被找到,意味着这是张连通图。且已明文规定是找最小字典序的标号序,所有这样找下来的答案就是唯一且确定的(因为1号点的标号一定是0)。利用b转载 2020-07-16 22:16:02 · 189 阅读 · 0 评论 -
Codeforces D. Solve The Maze (bfs & 贪心) (Round #648 Div.2)
传送门题意: 现有一个n *m 的迷宫,期间 ’ # '表示墙壁, ’ . '表示道路 , ’ G '表示好人, ’ B '表示坏人。试问是否能通过将某些道路改建为墙壁,以让所有坏人不能从(n,m)出口逃出,而所有好人可以。思路: 这题看似很复杂,其实是有规律的。为了避免影响好人的逃亡,应该在坏人的四周建立围墙为了降低时间复杂度,应该以(n,m)为起点开始bfs(),标记所有能到达的点。最后遍历一遍,若有某个好人未被标记就是"NO",反之就是"YES"啦。代码实现:#include<原创 2020-06-11 18:12:16 · 226 阅读 · 0 评论 -
POJ 1797 Heavy Transportation (最短路 / 求路径最小边)
传送门题意: 有n个交叉口,m条路,每条路有三个属性:起点,终点,最大载重。假设从a到b的最大载重是从a -> b所能承载的最大重量,问从1 -> n的最大载重是多少?思路:其实和上一题非常相似,只不过上一题是求路径最小的最大跳跃距离,而这个题感觉是在求最小的最小承载重量。其实就是Dijkstra()一下,只不过上一题的d[i]表示0 -> i 的最小最大距离,而这一题的d[i]就表示1 -> i的最大承载重量。代码实现:#include <iostream原创 2020-06-10 16:52:27 · 184 阅读 · 0 评论 -
POJ 2253 Frogger (最短路 / 求路径最大边)
传送门题意: 有n个石头,各个石头之间都可以通过跳跃到达,试问从a[0]到a[1]的途中需要跳跃的最小最大距离为多少。答案保留三位小数。思路:因为a[1]到a[2]是绝对能到达的(至少可以直接a[0]跳到a[1]),所以我们只需Dijkstra()一遍就好。用d[i]表示a[0]到a[i]过程中的最大跳跃距离,再用max(d[j],f[i][j])来更新d[j]就行。代码实现:#include <iostream>#include <cstdio>#includ原创 2020-06-09 19:49:11 · 177 阅读 · 0 评论 -
Codeforces E. Tree Shuffling (树 & dfs) (Round #646 Div.2)
传送门题意: 有一棵n个节点的树,每个节点都有其a[i]代价,b[i]现有值,c[i]目标值。每次可以选择一个节点x作为根节点,选其子树的k个节点随机排序以得到目标值,消耗k *a[x]。试问是否可以使得整棵树变成目标值,并输出最小消耗;若不行输出-1.思路:用dfs维护一下子树中 0 -> 1和 1 -> 0的个数, 再用minn维护a[i]的最小值。可以知道,若子节点比父节点代价小,那肯定以子节点为根消耗最小,所以用dfs来递归就好啦。若minn == a[i]表示没有比其代价原创 2020-06-03 15:24:07 · 192 阅读 · 0 评论 -
匈牙利算法:二分图的最大匹配
传送门题意:给定一个二分图,其中左半部包含n1个点(编号1 ~ n1),右半部包含n2个点(编号1~n2),二分图共包含m条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数 n1、 n2 和 m。接下来m行,每行包含原创 2020-05-24 17:17:51 · 343 阅读 · 0 评论 -
染色法判定二分图
传送门题意:给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如果给定图是二分图,则输出“Yes”,否则输出“No”。数据范围1≤n,m≤10^5输入样例:4 41 31 42 32 4输出样例:Yes思路:二分图:当且仅当图中不含奇数环(边数是奇数的环)原理:先把起点染色为1,与起点相连的所有点染色为2,与2相连的再染色为1;原创 2020-05-23 20:04:25 · 380 阅读 · 0 评论 -
Kruskal:求最小生成树
传送门题意:给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条权原创 2020-05-22 19:28:37 · 597 阅读 · 0 评论 -
Prim:求最小生成树
题目入口题意:给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条原创 2020-05-21 19:39:09 · 678 阅读 · 0 评论 -
Floyd求最短路
题目入口题意:给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。数据保证图中不存在负权回路。输入格式第一行包含三个整数n,m,k接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。输出格式共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径原创 2020-05-20 17:44:27 · 295 阅读 · 0 评论 -
acwing 852. spfa判断负环
添加链接描述题意:给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式如果图中存在负权回路,则输出“Yes”,否则输出“No”。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过10000。输入样例:3 31 2 -12 3 43 1 -4输出样例:Yes思路:原理:还是和bel原创 2020-05-19 16:36:52 · 261 阅读 · 0 评论