![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM——图论
文章平均质量分 76
zhangxiang0125
我只希望我能一直进步,一直一直……
展开
-
HDU 1385 Minimum Transport Cost
Problem DescriptionThese are N cities in Spring country. Between each pair of cities there may be one transportation track or none. Now there is some cargo that should be delivered from one city to another. The transportation fee consists of two parts: The原创 2011-02-26 21:18:00 · 896 阅读 · 0 评论 -
POJ 2337 图论入门第三题
题目大意:求最大生成树。 题目分析:转换一下思维,将最小改为最大就可以了,题目数据有重边,使用kruskal算法无影响,使用prim算法需要注意一下、每次应该取最大的。 代码://kruskal算法可以避免重边的问题! #include#include#includeusing namespace std;#define init(a,what) memset(a,what,sizeof(a))#define read freopen("zx.in","原创 2011-04-10 14:58:00 · 406 阅读 · 0 评论 -
POJ 1751 图论入门第四题
<br /> 题目大意:铁路工人需要建N条路来连接M个村子,有些路已经建好,问你将这些村子连接起来所建路的最小值。最短路问题!<br /> 题目分析:去年在HDU上做过一模一样的一题,当时用kruskal过的,在POJ上交的时候果断TLE、无语……!一般情况下,稠密图我们使用prim算法,稀疏图使用kruskal算法。当然依题意而定。<br /> PS:这题需要记录路径,记录路径一直是我的短项啊。愁啊!<br /> 代码:<br /> <br />#include<cstdi原创 2011-04-10 15:13:00 · 407 阅读 · 0 评论 -
POJ 1201 图论入门第五题
题目大意:有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个。如果存在这样的序列,请求出满足题目要求的最短的序列长度是多少。如果不存在则输出 -1。 题目分析:显然差分约束+spfa、其实这题我理解也不怎么深……不晓得差分约束怎么会和spfa结合起来。 代码:#include#include#include#include#includeusing namespace st原创 2011-04-10 15:18:00 · 513 阅读 · 1 评论 -
POJ 1679 图论入门第六题
<br /> 题目大意:题目很简单,求一个图中最小生成树是否唯一。<br /> 题目分析:即判断次小生成树的权值与最小生成树的权值是否相等,如果想等则证明不唯一。其次小生成树的算法是枚举最小生成树的每条边,并将其删除,然后再剩余图中求最小生成树,最后选择权值最小的次小生成树与最小生成树比较即可。这题细节比较多。<br /> 代码:<br /> <br />#include<cstdio>#include<cstring>#include<algorithm>using n原创 2011-04-10 15:30:00 · 338 阅读 · 0 评论 -
POJ 1734 图论入门第七题
<br /> 题目大意:在桑给巴尔岛的Adelton城镇上有一个旅游机构。它们决定在提供许多的其它旅游点之外,再向客人们提供旅游本镇的服务。 为了从提供的吸引服务中尽可能地获利,这个旅游机构接收了一个精明决定:在相同的起点与终点之间找出一最短路线。你的任务是编写一条程序来找类似的的一条路线。在这个镇上,有N个十字路口(编号1至N),两个十字路口之间可以有多条道路连接,有M条双向行驶的道路(编号为1至M)。但没有一条道路从一个十字路口出发又回到同一个路口。每一条观光路线都是由一 些路组成的,这些道路序原创 2011-04-10 15:36:00 · 569 阅读 · 0 评论 -
POJ 3522 图论入门第八题
<br /> 题目大意:求一个图中的最小生成树中最大边和最小边的权值差。如果不存在则输出-1。<br /> 题目分析:我们可以枚举每个生成树上的最小边或者最大边,然后构造生成树,最后求一下MIN{dist}即可。<br /> PS:在条件语句里,当有多个执行条件时,务必要确定那一个条件在前,或者条件语句的顺序对判断有没有影响。如果有影响的话、要判断每个条件语句的顺序。这道题在这个小细节上卡了将近2小时。<br /> <br /> 代码:(傻瓜调试了N久o(︶︿︶)o )<br原创 2011-04-13 21:38:00 · 459 阅读 · 0 评论 -
Fleury算法
Fleury算法:1.首先判断这个图是不是Euler图(闭迹或者环)2.若为闭迹,则我们选择出度大于入度的那个点为起点开始寻找Euler路径,若为环,则我们随便选择一个点都可以。3.采用DFS搜索的方式开始寻找Euler路径。算法实现:void eular(int cur)//Fleury算法的主体部分 { for(int i=0;i原创 2011-06-01 22:44:00 · 2746 阅读 · 1 评论 -
Tarjan算法
Tarjan算法: 写写对算法的理解。1.首先明确:DFN[]数组用来标记当前结点是栈中第几个结点(入栈第几个)。Low[i]表示i这个结点可以回溯到栈中最远的结点的编号。我们同时使用in_stack[]这个数组用来记录结点是否在栈中。Ssc_root[]数组表示当前结点的根结点。Ssc变量表示当前强连通分量的编号。2.算法的执行过程:首先将所有结点标号DFN设置为零。每次只选标号为零的结点进行Tarjan算法。然后以该结点扩展与之相邻的结点(表明这些结点有亲戚关系),在条件(即连通)允许原创 2011-06-01 22:37:00 · 607 阅读 · 1 评论 -
POJ 1511 图论入门第九题
题目大意:这道题描述非常的蛋疼、英语不好读了几遍才懂。就是说求原点到所有点的最短距离+该点到原点的最短距离。 题目分析:如果不加任何剪枝直接spfa的话会超时,题目给了8000ms但依然不够。我使用邻接表来存储图、并反向建立表,这样我们遍历图两遍(正、反)就可以求解出此题。不过这题的建图我一开始不会。参考了一位大牛的方法、图的邻接表写完真是各式各样啊,每一种写法都能解决不同的问题。何时哥才能达到那种境界啊!啊 ? 啊 ?! 代码:#include#include#inclu原创 2011-04-15 21:15:00 · 593 阅读 · 0 评论 -
POJ 1062 图论入门第十题
<br /> 题目大意:这一道中文题、当然中文题也有读不懂的时候、比如这句:“但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。”我就想错了、应该说想麻烦了。搞了半天连个样列都过不了、索性最后放弃了。看了网上别人的题解,说要对限制范围进行枚举,这样既满足了限制条件又避免了通过中间交换而形成隔人差值。感觉很犀利!<br /> 题目分析:手一激动全写在题目大意里面了。<br /> 代码就是算法:<br /> <br />#in原创 2011-04-15 21:38:00 · 456 阅读 · 0 评论 -
POJ 3013 Big Christmas Tree
<br /> 看到dissguss里有个人说:自从做完这道题以后我开始讨厌过圣诞节了!o(∩_∩)o真囧~从来没过过什么圣诞节的表示没感觉。不过这题也确实是一道变态的题目、看看这题的通过率你就知道了。<br /> 题目描述:要建一棵圣诞树,使得总的花费最小。具体规则是:圣诞树是一颗无向树形图,其中,编号为1的节点为根节点,原始图中每条边具有边权(unit):材料的单位价值,每个点也有一个权(weight):点的重量。生成树中,各个点处的花费是指向该点的边权(unit)* 该点的子树中所有点的原创 2011-05-03 21:11:00 · 631 阅读 · 1 评论 -
POJ 3259 图论入门第二题
<br /> 题意大意:个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路,虫洞有这样的性质: 时间倒流。问你这个农民能不能看到他自己,也就是说,有没有这样一条路径,能利用虫洞的时间倒流的性质,让这个人能在这个点出发前回去,这样他就是能看到他自己了。<br /> 题目分析:就是求一个图中有没有负环?,有的话就是YES,没有的话就是NO。判断负环很简单,判断一点个点入队列次数,如果>N,则存在负环。<br /> PS:这题我wa到死,疯狂提交10多次原创 2011-04-10 12:38:00 · 738 阅读 · 0 评论 -
POJ 1125 图论入门第一题
<br /> 问题描述:股票经纪人要在一群人中散布一个传言,传言只能在认识的人中传递,题目将给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间,要求程序给出以哪个人为起点,可以在耗时最短的情况下,让所有人收到消息。<br /> 问题分析:典型的floyd,关键是求最短路中最长的两点(细节处理)。---可以更加深刻的理解folyd算法!<br /> <br /> 代码:<br /> <br />#include<cstdio>#include<cstring>原创 2011-04-10 12:03:00 · 541 阅读 · 0 评论 -
Toposort排序
1.在基本算法的框架下实现的Toposort排序采用的是贪心的思想,即我们输出的一组解是按照字典序排好的,当然如果我们改变判断结点入度的顺序也同样可以当作字典序的逆序排列,POJ 3687就是一个简单的toposort,不过这道题目BUG很诡异,正确理解题意便能迅速秒杀这道题目。#include#include#includeusing namespace std;#define read freopen("zx.in","r",stdin)#define write freopen原创 2011-05-25 22:09:00 · 590 阅读 · 0 评论 -
HDU 最短路小小结(只涉及初级算法)
HDU最短路题目:1.题号:2544 难度:1 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2544分析小结:入门级别,甚至floyd都可以过。2.题号:2066 难度:2 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2066 分析小结:也是入门级别,求起点集合到终点集合的最短路。3.题号:2112 难度:3 题目地址:http://acm.hdu.edu.cn/showprobl原创 2011-02-26 22:02:00 · 1334 阅读 · 1 评论 -
HDU 2923 Einbahnstrasse
Problem DescriptionEinbahnstra e (German for a one-way street) is a street on which vehicles should only move in one direction. One reason for having one-way streets is to facilitate a smoother flow of traffic through crowded areas. This is useful in city原创 2011-02-26 21:58:00 · 904 阅读 · 1 评论 -
POJ 1860 Currency Exchange
<br />题目大意:给定n种货币及其汇率,求能否通过货币兑换使得你手里的钱币增多、细想一下其实就是求一条最长路,那关键问题就是如何判断循环终止了。<br />我想主要有下面两个边界条件:<br /> 1.当不能松弛的时候停止, 这样就代表这个图中没有正环,这样判断一下dist[xx]是否大于curmoney就可以了。<br /> 2.管他妈什么正环负环,把起点到所有点的距离更新一遍看看dist[start]是否大于curmoney就行了。<br />这题我wa了估计有10多次,一开始用原创 2011-03-04 18:41:00 · 411 阅读 · 0 评论 -
最小生成树之——kruskal算法!
K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。现将自己总结的kruskal算法模版粘贴如下:#include#includeusing namespace原创 2011-02-20 19:50:00 · 415 阅读 · 0 评论 -
HDU 2112 HDU Today
经典的dijkstra算法,同时是学习map映照容器最好的样题!一、下面先介绍dijkstra: (这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值) 1. 置集合S={2,3,...n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边) 2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3 3. 对全部i属于S原创 2011-02-23 20:24:00 · 698 阅读 · 2 评论 -
HDU 1874 畅通工程续
Problem Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input本题目包含多组数据,请处理到文件结束。每组数据第一行包含两个正整数N和M(0接下来是M行道路信息。每一行有三个整数A,B,X(0再接下一行有两个整数S,T(0 Output对于每组数据,请在一行里原创 2011-02-23 21:37:00 · 695 阅读 · 1 评论 -
最小生成树之——prime算法
<br /> prime算法是用来解决最小生树的,那么,何为最小生成树呢?最小生成树就是一棵树,这棵树包含所有点,而且无回路,同时,其各边权值之和最小。prime算法的意思是,找两个集合A、B,初始化,A中存的是图中所有的点,B为空集,然后,我们将A中的起点放入B中,注意这是个剪切的过程即从A中取出起点,放入B中,执行完此操作后,A中已无被操做的点。以后各点也是如此,然后找出B中的点到A中的点的最小距离(注意,当B中的点不唯一时,要比较的是B中所有点到A中所有点的所有距离),将这个终点也从A原创 2011-02-22 22:01:00 · 870 阅读 · 0 评论 -
POJ 1860
做惯了spfa的邻接表算法,转换成邻接矩阵就SB了,直接wa了好几天。最终在看着别人的代码敲完邻接矩阵后才发现自己的基础真的很差唉,题目做完快半个月了,今天再整理时又看到了这题,不禁愕然!唉,最短路学的还是不怎么扎实!先上代码,日后慢慢看(代码中残留着邻接表的部分)。#include#include#include#includeusing namespace std;#define init(a,what) memset(a,what,sizeof(a))#defi原创 2011-03-22 20:36:00 · 526 阅读 · 0 评论 -
HDU 1285 确定比赛名次
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。 拓扑排序方法如下: (1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它. (2)从网中删去该顶点原创 2011-03-24 20:12:00 · 415 阅读 · 0 评论 -
无向图的连通性
<br />先明白一些概念。<br />割点:若一个点删除后(也就是与之相连的边统统去掉),无向图不再连通,那么此点称为割点。<br />桥:若一条边断去后,无向图不再连通,那么此边称为桥。桥有一个很好的性质,就是DFS一个无向图,那么这个过程必定要经过桥。<br />块:没有割点的无向图称为2-连通分支,也称作块。<br />割点、桥均可以在DFS的过程中求得。<br />那么,对于一个无向图有以下操作:<br />1.将一个无向图的块缩成一个点。这个时候要注意,一个点是有可能在两个块之中的,因此不能用f转载 2011-05-19 21:37:00 · 1624 阅读 · 0 评论 -
HDU 2647 Reward
<br /> 题意大致是先判断一个图中是否有环,如果有环则直接输出-1,如果没有,找能构成几个拓扑排序,每个拓扑排序从888开始依次曾一,最后求总和。<br /> 我一开始用做1285时,自己写的模版做,结果超内存了,开了一个10000*10000的二维数组。实在没办发在网上找了一份用指针写的拓扑排序,一直对指针很生疏,看了将近一个晚上才明白。不过,使用指针的话也的确很方便,时间效率基本差不多、空间上大大减少了。<br /> <br />#include<cstdio>#incl原创 2011-04-05 13:43:00 · 518 阅读 · 0 评论 -
POJ 3463 Sightseeing
<br /> <br /> 这绝对是一道好题、一道深刻理解dijkstra算法的不二选择。<br /> 题目是要求求出最短路和比最短路大1的次短路的总个数、卡时为2000ms。读完题目我感觉这题应该不难、本想练练手熟悉一下模版、后来……就悲剧了。<br /> dijkstra算法到底是怎么回事?我现在不敢说真懂了,做了至少80+的图论题目了,遇到的dijkstra算法的也不下20+、但这个题目真的让我很受益……在此膜拜一下dijkstra本人,不愧为21世纪计算机界的神牛!<原创 2011-05-06 21:30:00 · 616 阅读 · 2 评论