ACM-图论
Helios_nannan
得失成败,都只对自己交代
展开
-
hdu 1874畅通过程续 所有最短路算法集合
传送门:hdu 1874畅通过程续 这篇文章并不是为了这个题目而做过多的描述,是为了说几种最常用的最短路的算法单源最短路单源最短路就是以一个特定的点为起始点,求这个点到所有点的最短路。如果终点固定的话就叫做两点之间最短路问题。Dijkstra这个算法在数据结构书里面被划分到贪心张姐里面,但是在《运筹学》这类书里面被划分到了动态规划里面! 当然这个算法是有一个前提条件的,就是没法变得权值必须是正值原创 2016-07-28 18:32:49 · 662 阅读 · 0 评论 -
CSU1817 Bones’s Battery 二分+Floyd+dp
题目大意有一辆汽车,在最开始的时候油箱是满油的,没经过一段路程就要浪费一定油量,问在保证能够遍历每个节点的通知油量的容量最少是多少。解题思路首先要二分答案,看到数据量这么大就很容易看出来,然后首先第一遍Floyd处理出每个任意一个节点到任意一个节点的最短距离,然后二分油量,我们设dp[i][j]从i节点出发到j节点能否到达,如果两点之间的最短路小于或者等于二分后的油量那么我们就设置dp[i][j]原创 2017-03-11 20:06:07 · 494 阅读 · 0 评论 -
UVA - 10054 The Necklace 欧拉回路
题目大意给出两个数字是一条边,然后找出任意一个欧拉回路。 无向图欧拉回路的条件: 1. 要联通 2. 每个节点度必须是偶数这个简单题目卡了我一下午,结果就是少输出了空行;AC代码#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int原创 2016-12-17 15:45:55 · 529 阅读 · 1 评论 -
poj 3259 Wormholes SPFA判断 负权值环
传送门:poj 329 Wormholes题目大意测试的第一行N,M,W N代表点的个数,M代表双向边的个数,W代表单向边的个数解题思路简单的SPFA判断有没有负环,如果某一个点进入的队列的次数大于了N就代表有负环!AC代码#include<cstdio> #include<cstring> #include<queue> using namespace std; const int MAXN =原创 2016-08-11 12:12:38 · 441 阅读 · 0 评论 -
BNU 1642 简单的图论问题? 最短路+BFS
传送门:简单的图论问题? 中文题目不做过多的解释解题思路输出的第一个就是使用简单dijsktra就可以了,对于有趣的情况使用优先队列+BFS就可以,这两种情况分别处理AC代码#include<cstdio> #include<cstring> #include<queue> #include<cmath> using namespace std; const int MAXN = 505; con原创 2016-08-11 00:20:33 · 468 阅读 · 0 评论 -
hdu 5418 Victor and World 状态压缩+SPFA最短路
传送门:hdu 5418Victor and World题目大意给一个地图,从其中一个点开始走,遍历完所有的点后最后再回到这个点,求最短路径解题思路这个点数知识16所以很容易想到状态压缩! 我们用dp[i][j] 表示 状态为i的时候,结尾在j位置,状态转移方程为dp[S|(1<AC#include<cstdio> #include<cstring> #include<queue> #includ原创 2016-08-09 01:55:00 · 491 阅读 · 0 评论 -
Codeforces Round #360 (Div. 2) -- C. NP-Hard Problem (DFS二分图染色法)
传送门:Codeforces Round #360 (Div. 2) – C. NP-Hard Problem题目大意给你一个无向图,判断是否能够构成一个二分图,如果能的话,输出二分图左边的集合和右边的集合。解题思路比较简单的二分图对每一个没有染色的节点进行DFS染色,如果已经连接的节点已经染色了,如果相邻的节点已经染色,并且颜色是相同的就是不能构成二分图!AC代码#include<cstdio>原创 2016-08-06 22:36:34 · 506 阅读 · 0 评论 -
SGU 101. Domino 欧拉回路
题目大意给定你n张骨牌,每张牌左右两端有一个数字,每张牌的左右两端数字可以颠倒,找出一种摆放骨牌的顺序,使得相邻骨牌的两端数字相同(最左边骨牌的最左端和最右边骨牌的最右端可以不管)。解题思路这是个很普通无向图欧拉回路,但是要注意判断这个图是否在一个连通分量里面! 输出No solution的条件有两个 1. 如果不满足欧拉回路的性质就输出 2. 如果不在一个连通分量 对应于第一个就是判断每个原创 2016-08-06 16:32:17 · 330 阅读 · 0 评论 -
poj 2230 Watchcow 无向欧拉回路求路径
传送门:poj 2230 Watchcow题目大意从1开始每个节点访问两次,打印任一路径解题思路因为要求每个节点访问两次,这也就暗示了每个节点之间连通是双向的。所以建边的时候只要双向建立边就好了,也就是建立无向图。两个点之间也就是两条边,然后再用DFS一直找下去就好了!AC代码#include<cstdio> #include<cstring> const int MAXN = 50000*4+5;原创 2016-08-06 16:15:20 · 404 阅读 · 0 评论 -
scu 4444 Travel 补图的最短路
传送门:Travel题目大意有N个点M条边 然后是M条a花费的边 其余的所有的边都是b花费,问1到N的最小值解题思路这个题目分为两种情况: 1. 从1和N之间相连的是花费为b,那么答案就是花费为a的M条边里面的最短路和b进行比较,取最小值,直接跑一边dijkstra就可以了 2. 从1到N之间相连的是a,那么答案就是N(N-1)/2条花费为b的边中的最短路和a进行比较取最小值,因为变得数量特原创 2016-08-18 00:05:03 · 1574 阅读 · 1 评论 -
hdu 2647 Reward 拓扑排序+向前星邻接表
传送门:hdu 2647 REward题目大意有个老板要给员工发工资,老板很善良想满足每个员工的要求 ,但是他很吝啬。解题思路先解释一下什么是向前星邻接表; 一般在一个图当中我们使用邻接矩阵表示连个点之间是否有边比如:E[i][v] = 1表示有边,如果等于0表示没有边,但是如果数据十分大的时候就会造成空间的浪费,而且内存也是不够的。那么我们就考虑使用邻接表了,(邻接表和邻接矩阵都是线性代数里面的原创 2016-08-06 02:14:29 · 560 阅读 · 0 评论 -
poj 1470 Closest Common Ancestors LCA离线
传送门:Closest Common Ancestors基本的LCA的离线版本,如果不懂请移步LCAAC Code#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int MXN = 1e3 + 7; const int MXM = 3e5原创 2017-04-04 10:53:50 · 685 阅读 · 0 评论