
图论 - 基础图论
图论 - 基础图论
Authur_gyc
这个作者很懒,什么都没留下…
展开
-
2015 CCPC The Battle of Guandu(思维 + dijkstra)
思路对于每个重要程度为2的战场,曹操的人数要大于袁绍的,枚举重要程度为2的战场,对于x战场曹操人数+1,则对应的袁绍战场y要+1,为了平衡这个影响,曹操要对y战场+1,然后又是袁绍……,不断将影响传递下去,直到传递到重要程度为0的战场,此时可以停止,因为重要程度为0的战场对胜负没有影响。记录传递的所有路径中的最小花费(最短路),即可知道当前枚举的战场的最小花费,枚举所有重要程度为2的战场,使得它们的曹操人数都等于袁绍人数+1即可。这样跑显然会T,我们建反图,建新点空边连重要程度为0的点,然后对新点跑di原创 2020-10-23 20:44:42 · 234 阅读 · 0 评论 -
2020 杭电多校第三场 1007 Tokitsukaze and Rescue(spfa)
题目题目链接思路题目的k很小,最大为5。图的点数也很小,最多50。由于题目的边权是随机生成的,所以用spfa跑最短路,所获得的最短路径不会太长。(随机生成,出题人没有想卡spfa)那就每次都跑一次最短路,记录路径,枚举删除这个路径上的每一条边,继续在删了边后的图上跑最短路,直到删了k条边,这时候直接跑一个最短路的距离。取最大值即可。由于n k很小,并且没有卡spfa,时间复杂度不会到达50^5。代码#include <bits/stdc++.h>using namespac原创 2020-07-29 19:46:46 · 322 阅读 · 0 评论 -
XX Open Cup. Grand Prix of Korea G题 Lexicographically Minimum Walk(深搜)
文章目录题目题解思路代码题目G题 Lexicographically Minimum Walk题解思路要求s到t的字典序最小的路径,有可能不可达或路径无限长。我们的贪心策略:要让字典序最小,那每次我们都要选取所相连的字典序最小的那条边,这样字典序能够做到最小,但是这样有可能走进死胡同里去了,而实际上s和t是可达的。那么我们进行一个预处理,我们想要知道走哪些路是能到达t的,得出这些路之后,我们在这些路上进行上述的贪心策略即为答案。怎么求s到t的可达路呢?将原图反建,以t为起点跑一个dfs即原创 2020-05-17 16:35:50 · 543 阅读 · 0 评论 -
图论 2-SAT
个人感受学习2-SAT最好先掌握一些离散数学方面的知识。概念给定一个布尔方程,判断是否存在一组布尔变量的真值指派使整个方程都为真的问题称为布尔方程的可满足性问题(SAT)。SAT问题是NP完全的,但对于满足一定限制条件的SAT问题,还是能够有效求解的。内容我们看到一个合取范式(a∨b∨……)∧(c∨d∨……)∧……如果每个子句中的文字都不超过两个,那么对应的SAT问题又称为2-SAT...原创 2020-02-03 17:19:16 · 1974 阅读 · 0 评论 -
2018 ICPC亚洲区域赛徐州站 A题 Rikka with Minimum Spanning(Kruscal)
题意给你一个图,问有多少个最小生成树,要求输出最小生成树个数乘以最小生成树的权值。思路数据是那样生成的,有相同的权值的边的概率特别小,可以视作不会发生(测试用例中也的确没有这样的数据)。题目中的代码 + 套Kruscal算法的代码就能过。实际在做,考虑了重边的问题,u,v两个点如果有多条直连边,在Kruscal算法要取u,v的连线时,取其中最小的那个,并算出u,v之间一共有多少个权值与最小...原创 2019-10-09 00:57:53 · 288 阅读 · 0 评论 -
2019 ICPC南昌网络赛 B题 Fire-Fighting Hero (思维 + Dijkstra)
题目链接https://nanti.jisuanke.com/t/41349题意给你一个点,另外又给K个点,问你这一个点到其他点的最短距离的最大值除C后 与 这K个点到其他点的最短距离的最大值 的大小关系。思路用到Dijkstra算法。朴素的想法就是做K+1次Dijkstra求答案,但是这样肯定会TLE。(然而我们比赛的时候这么打给WA了,还不知道WA哪里)这道题的巧妙之处在于我们可...原创 2019-09-27 00:37:15 · 261 阅读 · 0 评论 -
2019 ICPC南京网络赛 H题(SPFA/Bellman-Ford)
题意给定六条边,让你设定他们的权值,加进去后,图不要产生负环。输出六条边的边权。思路对于第一条边,u v,我求v到u的最短路dis,那么u v的边权即为dis。将u v这条边加入图中。对于第二条边,重复上述操作即可。这样就能保证图中不会产生负环。不能用 Dijkstra 算法,用 SPFA 或者 Bellman - Ford 才能处理负边。代码#include <bits...原创 2019-09-01 18:34:29 · 515 阅读 · 0 评论 -
图论 最小环 Floyd
概念最小环:指一个由n个点构成的图中,边权和最小的环。(n >= 3)。最小环分为有向图最小环和无向图最小环。这里讲一下 无向图最小环方法n为点的个数,m为边的条数。三种解法:一、暴力时间复杂度O(n2 m)暂时没学二、Dijkstra时间复杂度O(m(n+m)lognm(n + m)log nm(n+m)logn)暂时没学三、Floyd时间复杂度O(n3)设原...原创 2019-08-20 23:05:59 · 901 阅读 · 0 评论 -
知识点四 图论:Prim算法 Kruskal算法 (最小生成树)
解决的问题这两个算法都是用来在加权连通图里搜索最小生成树。也就是一个图有很多边,这些边有权值,然后我们要从这些边中找到这样一个边的集合,使得全部的顶点都是连通的,并且边的权值之和最小。Prim(普里姆算法)算法描述:1).输入:一个加权连通图,其中顶点集合为V,边集合为E;2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;3).重复下...原创 2019-07-17 18:26:04 · 1272 阅读 · 0 评论 -
图论 路径还原
个人模板#include<bits/stdc++.h>using namespace std;typedef long long ll;const int max_v = 1e3+5;const int INF = 0x3f3f3f3f;int prev[max_v];//最短路上的前趋顶点int d[max_v];int cost[max_v][max_v];i...原创 2019-07-18 23:35:01 · 406 阅读 · 0 评论 -
知识点四 图论:Floyd(任意两点最短路)
Floyd这个算法很简单,很容易理解直接看代码核心代码void Floyd(){ for(k = 0;k < n;k++) for(i = 0;i < n;i++) for(j = 0;j < n;j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}...原创 2019-07-12 18:49:43 · 325 阅读 · 0 评论 -
知识点四 图论:Tarjan算法(强连通分量)
Tarjan算法求解 有向图 强连通分量 的线性时间的算法一些概念如果两个顶点可以相互通达,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。极大强联通子图:它是一个图的强连通子图,并且加入任何一个在它的点集外的点都会导致它不再强连通。Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。理...原创 2019-07-12 17:29:42 · 420 阅读 · 0 评论 -
专题四 图论: 并查集(HDU 1232)
HDU 1232http://acm.hdu.edu.cn/showproblem.php?pid=1232题意模板题,求连通这几个相互孤立的城镇群至少要多少条路。思路觉得并查集想法很新奇。a[i]存储的内容表示i属于哪个节点之下(差不多是被哪个大哥罩着的意思)初始的时候是自己,然后更新,最后看a[i]存储的还是i的个数有几个,就有几个相互独立的集合了。答案即为集合的个数减1代码...原创 2019-03-15 22:43:32 · 168 阅读 · 0 评论 -
知识点四 图论:dijkstra (HDU 2544 +HDU 1874)
dijkstra(狄克斯特拉)知识点1、可以用于解决最短路问题2、dijkstra算法在数据量比较小的情况下可以直接开邻接矩阵。3、不能处理含有负权环的图对dijkstra算法的理解dijkstra算法类似广度优先算法。每次都把周围的与目前的源点相连的点先搜一遍,更新一遍,然后看哪个点近,把它当成下一个源点继续搜,同时不断更新距离。搜完所有的点后,就得到了源点到所有的点的最短距离。...原创 2019-03-15 16:50:22 · 248 阅读 · 0 评论 -
知识点四 图论:拓扑排序(HDU 3342)
拓扑排序知识点1、拓扑排序就是想让图中的全部有向边都从左指向右,同时将所有顶点都排列在同一条水平线上。2、用深度优先和广度优先均可以实现拓扑排序拓扑排序理解 一个图,每次找到入度为零的点,把它删掉 并且把它指向的那些顶点的入度减一, 如果有环肯定会被删到剩一个环而导致找不到入度为零的点(因为循环执行n次,每次只删一个顶点) 如果没有环那肯定执行n次后刚好删完。 题目http:/...原创 2019-03-15 16:59:41 · 247 阅读 · 0 评论