图论
小盼你最萌哒
这个作者很懒,什么都没留下…
展开
-
最小点覆盖 模版
dfs函数是寻找该点能否找到另一个与之相连的点连接。#include<stdio.h>#include<iostream>#include<string.h>#include<vector>using namespace std;#define N 505int n,m;vector<int>v[N]; //表示左边各点连接了的右边的点,其实存的是边的关系bool flag[N原创 2015-08-13 15:33:52 · 407 阅读 · 0 评论 -
HDU 1301 Jungle Roads prim算法 最小生成树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1301题目大意: 有n个点,输入n-1组数据,分别是以前n-1个点为开头,每个点后面输入m组数据,分别是它连接的点和之间的距离,求存在的边中,找出n-1条边让他们全部相连,并且总消耗最小。参考代码如下:#include"cstdio"#include"iostream"#include"string原创 2015-08-07 19:07:04 · 376 阅读 · 0 评论 -
POJ 1511 Invitation Cards 邻接表 spfa算法
原题: http://poj.org/problem?id=1511题目大意: 单向图,需要从点1到每个点去一次,去了马上回来,再去下一个点,求往返路径和。如果只有100个点,跑一遍floyd就可以了,这里有10w个点,不行。 朴素的dijkstra是N^2的复杂度,这里要超时。 所以这里我们用spfa这种接近2N的算法。由于二维数组空间不够,所以只能用vector或者邻接表,因为vecto原创 2015-08-10 15:24:11 · 581 阅读 · 0 评论 -
HDU 2544 最短路 单源Dijkstra
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2544题目大意: 图中有n个点,有m条边,输入m条边的起点终点和长度,求点1到点n的最短距离。直接跑一遍dijkstra就可以了。#include"cstdio"#include"iostream"#include"string.h"#define INF 0x7f7f7f7fusing nam原创 2015-08-06 10:56:56 · 491 阅读 · 0 评论 -
HDU 1875 畅通工程再续 prim算法 最小生成树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1875题目大意:参考代码如下:#include"cstdio"#include"iostream"#include"string.h"#include"math.h"#include"stdlib.h"using namespace std;const double INF = 12345678.原创 2015-08-07 20:39:18 · 508 阅读 · 0 评论 -
HDU 1863 畅通工程 kruskal算法 最小生成树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1863kruskal算法是一种贪心策略,每次放长度最小的边,如果两个店属于同一个集合就不放,否则会构成环,每放一个点我们记录一次,最后把所有点都连通了就结束算法。 这里还要用到并查集的知识。参考代码如下:#include"iostream"#include"cstring"#include"cstdi原创 2015-08-08 09:40:50 · 518 阅读 · 0 评论 -
HDU 1285 确定比赛名次 拓扑排序
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1285这题和我们一般的比赛计算名次不一样,这东西拼的护甲,当前状态下没人打得动他他就是当前最厉害的,典型的拓扑排序。参考代码如下:#include"stdio.h"#include"iostream"#include"string.h"#include"queue"using namespace原创 2015-08-10 15:58:47 · 370 阅读 · 0 评论 -
HDU 2066 一个人的旅行 超级起点 多源起点dijkstra
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2066对于这种多个起点和终点的问题,我们可以建立一个超级起点来跑一遍dijkstra算法,求得最后的结果。题目没有输入n,需要自己确定最大点的序号。参考代码如下:#include"cstdio"#include"string.h"#include"iostream"#define INF 1<<29原创 2015-08-07 16:26:08 · 398 阅读 · 0 评论 -
HDU 1863 畅通工程 prim算法 最小生成树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1863由于只给了一部分路,所以有的地方可能不能连通,我们只需要判断在所有点都被标记完之前是否存在未被标记的点到原点的距离为INF就可以了。参考代码如下:#include"cstdio"#include"iostream"#include"string.h"#define INF 0x7f7f7f7f原创 2015-08-07 19:34:59 · 438 阅读 · 0 评论 -
POJ 3041 Asteroids 二分匹配 最小点覆盖
原题: http://poj.org/problem?id=3041题目大意: 有点像大鸟那个题,每一枪可以打死一整排或者一整列的鸟,如何开最小次数枪打完所有鸟。一般情况下我们建图都是建的邻接矩阵,每个点代表该横纵坐标下的点的鸟的个数。 那样我们是以坐标数据为边,以鸟为点。 如果我们以鸟为边,以边为点,只需要让每条边至少有一个点被标记(该行或者该列打了一枪)就可以了。 这就是二分匹配的最小原创 2015-08-13 14:58:12 · 416 阅读 · 0 评论 -
HDU 1690 Bus System 任意点最短路径Floyd
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1690题目大意: 图中的表是代表不同长度路径的花费,输入所有点的坐标,求任意两点间的最短花费。因为是求任意两点,这里最好是用floyd算法。 题中几大坑: 数据可能会超int,要用long long int; 坐标可以为负,求距离要用abs绝对值函数。参考代码如下:#include <iostre原创 2015-08-07 10:05:27 · 904 阅读 · 0 评论 -
HDU 2680 Choose the best route 超级起点 多源起点dijkstra
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2680题目大意: 有n个点,m条路,可以从多个起点出发,但是每条路都是单向的,求到达点s的最短距离。这道题只需要加入一个超级起点连接各个起点,就可以当作标准的dijkstra来做。 代码参考如下:#include"iostream"#include"cstring"#include"cstdio"原创 2015-08-07 14:47:36 · 367 阅读 · 0 评论 -
HDU 2094 产生冠军 map
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2094只需要求最后有人没有被打败过,只有ans是1的时候才输出yes,代表只有一个人是冠军。 我们每次先看赢家有没有被打败过,如果没参加过比赛,那么他可能是冠军,状态改成1,如果没有他的状态是1,表示他是冠军之一。如果他参加过比赛,那么他肯定是他之前的状态(之前不是冠军现在怎么打都不能当冠军,输了的记录原创 2015-08-10 16:34:11 · 458 阅读 · 0 评论 -
HDU 1879 继续畅通工程 prim算法 最小生成树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1879因为输入的点有n*(n-1)/2,即包含了所有情况,所以对于没有修通的路,它的花费就是输入的花费,对于修通的路,花费为0,跑一次prim算法即可求出答案。参考代码如下:#include"cstdio"#include"iostream"#include"string.h"#define INF原创 2015-08-07 19:17:33 · 398 阅读 · 0 评论 -
Dijkstra 最短路径算法详解 无向图
对于最短路径问题,这里介绍一种O(N^2)的求解方法。 对于求最短路径的问题一般都会给出一幅图,或者边与边的关系。如上图。假设我们起点是A,我们要求到F的最短距离,我们会怎么做? 首先,因为A是起点,所以我们把对于每个点都有个参数,相对于A的距离,默认除了A到A为0,其他都是无穷大。 从起点A开始,我们更新与A相连通的点到A的距离,并把A点标记。如图: 我们遍历一次所有点与A的距原创 2015-08-06 15:15:26 · 23743 阅读 · 2 评论 -
HDU 3790 最短路径问题 裸跑dijkstra
原题: http://acm.hdu.edu.cn/showproblem.php?pid=3790本题要注意的地方: 要最小花费,地图上不能到达的点钱要初始化成INF,而不能是0; 要考虑各种相同路径的时候,价格要选择小的。 最初的dis和cost应该直接从图中数据初始化一次,后面跑dij的次数减一次就行了。#include"cstdio"#include"iostream"#incl原创 2015-08-07 16:54:43 · 553 阅读 · 0 评论