随笔分类 - 图论——最短路
摘要:Tima goes to Xentopia " Tima goes to Xentopia 题目链接 " 思路 首先这题应该用Dijkstra应该是无疑的,但是我们又应该如何表示不同的状态呢,我们定义了dis[target][rednum][bluenum] 来表示当前道路的状态,然后和一维
阅读全文
摘要:" POJ 1860 题目链接 " 思路 一开始写到这个章节的时候不会写这道题,原因就是不知道spfa到底有什么用,因为一直听说spfa已死,这句话。 这是一道典型的spfa找负环的题,但是这里不同的是,这了的"负环"其实是正环。 稍加处理一下链式向前星,加入一个cost消耗量,接下来就是裸的spf
阅读全文
摘要:" HDU 4725 题目链接 " 题目大意 这是一个分层的图。 层与层之间的点可以互相到达,但是在同一层的点如果没有边的话,不能直接相连。 有的点之间有边相连,可以直接互通不用通过楼层,当然也可以通过楼层如果更快的话。 难点和处理方式 m条边建立边简单,关键就是如何处理好层与层之间的点的关系。 我
阅读全文
摘要:" POJ 3660 题目链接 " 闭包传递问题 在这个例子中,很明显,排序后(1,2,(3,4,5),6)我们是不能够确定各个点的位置关系的,3,4,5的关系是无法确定的。 但是如果我们加上两条边3 4,4 5。 发现我们可以确定3,4,5的关系了,排序变成1,2,3,4,5,6的关系, 通过这两
阅读全文
摘要:" HDU 4370 题目链接 " 我看到这道题的时候就是一脸懵,这能用最短路求解??? 解题方法 条件 1.X12+X13+...X1n=1 2.X1n+X2n+...Xn 1n=1 3.for each i (1 n。 二、以点1形成一个环,以点n形成一个环。 答案就是上述两种情况的最小值。 代
阅读全文
摘要:" POJ 3169 题目链接 " 思路 知道差分约束的都知道,这是一道线性差分约束裸题 对于ml的数据我们有,dis[y] dis[x] y,value = w 对于md的数据我们有,dis[y] dis[x] = w,变形dis[x] dis[y] x,value = 1 由于题目有限制条件,两
阅读全文
摘要:学SPFA已经有一段时间了,还没有学他最原始的算法版本,于是这里就补一个Bellman Ford算法吧。 这是一个解决单源无负环最短路的算法 主要思想 我们知道要让图联通,每一个点必须有一条边相连。 我们每次取一个点取延申,不断地得到最优的路劲。同时如果没有负环存在的情况下,我们的最终拓展边数将会是
阅读全文
摘要:"POJ 2502 题目链接" 写题过程 这道题目的输入算是一个点了,有点晕一开始看到这题的时候,后面写着写着发现还行。 这题一定要注意单位,题目给的是xx(km/h),一定要转化为xx(m/s)。 还有就是输出的数据我wa了无数遍 思路 不难发现这就是一道最短路的问题,有地铁的路建立双向的快速路,
阅读全文
摘要:" LightOJ 1074 题目链接 " 题目意思 这是一个有负环求最短路的问题,每个站点有一个value,edge_value = (value[st] value[rt]) ^ 3,三次方。 思路 这道题目的关键就在于判断负边权可形成的回路,一开始看到这道题目的时候还以为直接来一遍Floyd就
阅读全文
摘要:" POJ 3159 题目链接 " 思路:差分约束 证明是最大值还是最小值的差分约束。 由题意我们知道,A B C 表示 num(B) include include include include include using namespace std; typedef pair PII; con
阅读全文
摘要:"POJ 2240 题目链接" 本来是一道非常简单的题,但是我wa了这么多 首先我得说一下POJ了,不支持 ~~ include ~~ 用~~ define ~~要加 include 的头文件又长见识了。 然后就是我自己的原因的,我在代码里面详细说明吧 思路 从例子中我们呢可以判断出,这是一道判断环
阅读全文
摘要:"POJ 3259 题目链接" 这是一道检查是否有负权边的最短路问题 一开始不知道怎么分析的,好像能选取一个点进行两遍Dijkstra,然后显然的wa了, 然后仔细分析了一波,这是一个多源路径形成回路的问题,之前在洛谷做过类似问题, 而且这道题目数据量只有500,那就不是可以用Floyed了,这道题
阅读全文
摘要:" POJ 1511 题目链接 " 一个非常玄学的操作 同样的代码,我用c++就直接wa,用G++成功ac,这是为什么??? 说题目思路吧 这显然是一题建立反向边的题,n稍微大一点到了1e6的级别,所以朴素版的Dijkstra是肯定过不了的,考虑用堆优化的1e6log(1e6)稳过,这道题目限时80
阅读全文
摘要:" POJ 1847 题目链接 " 思路 题意比较简单,关键在于如何转化为图的过程。 首先,我们对条件进行分析n最大是100,那么这题极有可能是Floyd 再而,切换开关需要的花费是1,每个开关链接着两个点,这里可以看作是一条边链接两个点。 最后,确定边权值,切换开关边权值是1,不切换开关边权值是0
阅读全文
摘要:Dijkstra 单源最短路堆优化 #include<bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 2e5 + 10; int head[N], to[N], value[N], nex[N
阅读全文
摘要:朴素版本 #include<bits/stdc++.h> using namespace std; const int maxn = 10010; const int inf = 0x3f3f3f3f; int a[maxn][maxn],dis[maxn],visit[maxn],n,m,s,t;
阅读全文
摘要:这一算法的核心思想是通过两边之和大于第三边不断逼近两个点的距离,最后得到最短距离。再通过不断的入列出列,最后使距离不能再小,得到最小距离。 邻接矩阵 #include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; co
阅读全文
摘要:弗洛伊德算法大致有点像dp的推导 dp[i][j] = min(dp[i][k] + dp[k][j], dp[i][j]), 其中 i 是起始点,j 是终止点。k是它们经过的中途点。 通过这个公式不断地更新dp[i][j],得到最短路径长。 我们先定义两个矩阵,minpath[i][j],表示的是
阅读全文
摘要:"POJ 2387 链接" 双向边,求最短路径长度,一道铁定的板子无疑了,这里用了堆优化的Dijkstra来写。
阅读全文
