图论
文章平均质量分 75
流風回雪_YZK
只盼来日登蜀道..
展开
-
poj3259,简单判断有无负环,spfa
英语能力差!百度的题意才读懂!就是一个判断有无负环的题。SPFA即可。,注意重边情况!!#include //判断有无负环,spfa#include#include#includeusing namespace std;int mark[503];int a[503][503];int d[503];int num_in[503];bool spfa(int n){原创 2014-01-21 12:08:30 · 779 阅读 · 0 评论 -
hdu 1596 floyd
直接FLOYD即可,但是WA了好几次,发现犯了低级错误!三个FOR循环顺序不能乱换!必需先枚举中间经过的点,后俩个随意。。。#include#include#includeusing namespace std;double a[1002][1002];int main(){ int n; while(~scanf("%d",&n)) {原创 2014-01-21 19:54:10 · 734 阅读 · 0 评论 -
poj 1062 昂贵的聘礼 dijkstra
关键1是把转为一张图,有向图,可以换,就为一条边,最后加上点的权重比较大小即可。关键2是题意的理解上,主要的等级限制,酋长肯定要在区间内,(有等级比酋长还高的),枚举大小为m的区间,从酋长最大,到酋长最小(等级),在每个区间内的点用DIJKSTRA,取最小的一个即可。#include#include#includeusing namespace std;// 等级,每原创 2014-01-22 17:53:25 · 637 阅读 · 0 评论 -
poj3635 FULL tank(TLE) 有限制的最短路(BFS搜索)。
用的BFS+优先队列+二进制压缩状态判重+链式前向星, TLE,好像有人这样过了。。。好像要用A*算法,还不太会,所以暂时放弃。但是也学会了很多,学习了链式前向星,更深理解了BFS求最优的时候,什么时候是第一次搜到结果就是最优,该题,通过枚举加的油量,每次加一个单位,从够下一条路开始到满容量,枚举所有路,花的钱少的在队优先(头),故先出队找到目标结点的必然最优,因为后面的都是前面再加钱的。。。。好原创 2014-01-24 11:17:08 · 1148 阅读 · 1 评论 -
Minimum Spanning Tree.prim/kruskal(并查集)
开始了最小生成树,以简单应用为例hoj1323,1232(求连通分支数,直接并查集即可)prim(n*n) 一般用于稠密图,而Kruskal(m*log(m))用于系稀疏图#include //prim n^2#include#includeusing namespace std;const int inf=0x3f3f3f3f;int a[102][原创 2014-01-25 18:35:48 · 802 阅读 · 0 评论 -
hdu1875kruskal简单应用。
标记是dificulty 2,水,开始kruskal时练手题,只需开始时数据处理下,不符合要求的边不要,要理解并查集和Kruskal,就简单了,判断下是否联通图,(只需在记加入有效边时候统计连通分支数即可),生成树必是n-1条边,有效加入次数为n-1次,少与之便不连通了,在杭电总能1A。。。在POJ从未1A。。。。#include#include#include#include#inc原创 2014-01-25 20:46:34 · 724 阅读 · 0 评论 -
hdu 1224 最长路
开始用dijkstra直接求,发现不行,算法问题(1-2,(30),2-4(20),1--3(10),3--4(100)最后一个点无法更新,导致错误),后用取负,加大数法也没过。原创 2013-10-04 15:37:45 · 897 阅读 · 0 评论 -
poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。
#include //219MS#include //最小生成树有一个很重要的性质:在构造生成树时有可能选择不同的边,但最小生成树的权是唯一的!所以在用kruskal算法时第一次加入的必然是最小生成树的最小边权值,最小边确定后,最小生成树的最大边的权值是所以生成树中最小的,于是只要枚举最小边,然后求最小生成树,就可以得到最大边,只要每次更新最优解就行了。#include#incl原创 2014-01-28 12:59:02 · 964 阅读 · 0 评论 -
poj1308+HOJ1325,判断是否为树
POJ 应该是判断是否为简单无环连通图,用并查集直接秒杀即可,而HOJ的是有向树,还需判断所有点的入度必需小于2,用一个类似hash【】数组判断一下即可, ////判断树之一:入度#include //判断是否是树 0MS#include#includeusing namespace std;int fa[100001];int mark[100001];原创 2014-01-28 16:50:31 · 757 阅读 · 0 评论 -
poj1273最大流初破
#include //16ms 1A#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;int m,n;struct edge{ int to,f,pre;};int mark=0;int minf=inf; //一条增广路最窄的边int原创 2014-02-20 20:51:00 · 868 阅读 · 0 评论 -
poj2186 求有向图G中所有点都能到达的点的数量
/*题意:有向图,求这样的点的数量:所有点都能到达它.缩点成有向无环图,思:如果该强连通有出度,那么从该出度出去的边必然回不来(已经缩点了),所以有出度的强连通必然不是。那么是不是所有出度为0的强连通分量都是呢?显然不是,如果存在多个出度为0的强连通,他们必然无解(他们之间必然不连通)。任然遍历边,判断不在一个连通分量中的边(即为缩点后的边)和点,考察期出度即可。*/#include原创 2014-02-09 17:44:32 · 2063 阅读 · 0 评论 -
poj1459多源多汇最大流问题
/*基本构图题,多源多汇,添加一个源点和一个汇点,所有源点都来自这个源点,同理,所有汇点都汇于这个汇点,dinic第二战,本来应该1A的,犯了一个低级错误!while(scanf("%d))要加“~”啊!SB了,记住这个教训!此次顺带学习了scanf的又一读入,忽略空格和已有符号,不错,并且更加了解了dinic算法(为什么要添加反向弧?反向弧其实是提供悔棋的机会(每次回走相当于原来的流原创 2014-02-22 20:19:06 · 1522 阅读 · 0 评论 -
hdu3622 2-sat问题,二分+判断有无解即可。
/*2-sat问题初破!题意:每一对炸弹只能选一个(明显2-sat),每个炸弹半径自定,爆炸范围不可相交,求那个最小半径的最大值(每种策略的最小半径不同)。思:最优解:必然是选择的点最近的俩个距离/2,其他半径大小无纺,不妨设他们都为该最小半径。求最小值最大,二分答案,每次判定R是否可行,可行就往大的搜索,注意精度r-l点在同一个SCC中即可。*/#include //G++原创 2014-02-11 11:35:44 · 940 阅读 · 0 评论 -
poj2112 二分+floyd+多源多汇最大流
/*此题不错,大致题意:c头牛去k个机器处喝奶,每个喝奶处最多容纳M头牛,求所有牛中走的最长路的那头牛,使该最长路最小。思路:最大最小问题,第一灵感:二分答案check之。对于使最长路最短,用folyd算出所有牛到每个喝奶点的最短路,每次枚举最大值,取不大于该值的路,重新构图;把所有牛赶去喝奶点,在喝奶点有限制,不是多源多汇吗?!取超级源点,限制为1(一头牛),超级汇点,限制为m,原创 2014-02-23 18:52:56 · 1355 阅读 · 0 评论 -
POJ 2391 多源多汇拆点最大流 +flody+二分答案
题意:在一图中,每个点有俩个属性:现在牛的数量和雨棚大小(下雨时能容纳牛的数量),每个点之间有距离,给出牛(速度一样)在顶点之间移动所需时间,问最少时间内所有牛都能避雨。模型分析:多源点去多汇点(此题源点也可能是汇点(源汇同点)),所以我的方法是:建立超级源点和超级汇点,超级源点连想所有点,容量为该店本来的牛数量,在把各点拆成如图(略丑),到汇点的容量分别为避雨容纳量,点点之间容量原创 2014-02-24 22:10:33 · 1761 阅读 · 0 评论 -
poj2723 2sat判断解+二分
典型的2-sat问题,题意:有m个门,每个门上俩把锁,开启其中一把即可,现在给n对钥匙(所有钥匙编号0123456...2n-1),每对钥匙只能用一把,要求尽可能开门多(按顺序,前max个)。关键是题意的分析与转化,只能选一?必然2-sat,每给一对门上的锁对应钥匙的编号,说:必需要这俩把钥匙的一把(至少),即:a^b,所以,建图了可以,总结通法:对应的数据编号:0123..,每个原创 2014-02-13 09:49:21 · 766 阅读 · 0 评论 -
poj3905 2sat!
这次已经不是2sat的问题了,相信2sat已经不是问题了,最后一题2sat,竟然跪在输入上!千万注意scanf(%c)!读入!!!!有空格也读啊!!!读入+ -一定要用字符读啊??笨死算了!被人水死!为人岂自甘下流栽!!好好努力!对于+1 -1 这样带符号的,直接%d读入判断符号即可啊!切记!!!#include //1688MS 第一页有木有!#include#i原创 2014-02-13 23:23:29 · 779 阅读 · 1 评论 -
poj3648,2-sat求解
关键是题意的理解,英语,有时候明明每个字都认识,但是还是理解错误!哎!!悲剧啊!题意啊!这是关键!开始误理解为n对新娘郞,非也!是只有一对,其他是夫妇,理解后就好做了,建立图是关键,怎么转化关系,对到2sat问题上来,不妨设坐在新娘一排的是要“选择”的,那么对每组读入,必需至少一个要选择,(柳暗花明啦?!)然后标号,2-SAT即可。没有1A原因:1:题意到关系一误:特殊情况:当原创 2014-02-13 16:58:08 · 1079 阅读 · 0 评论 -
POJ 2749 2SAT判定+二分
题意:图上n个点,使每个点都与俩个中转点的其中一个相连(二选一,典型2-sat),并使任意两点最大距离最小(最大最小,2分答案),有些点相互hata,不能选同一个中转点,有些点相互LOVE,必需选相同中转点(显然是2sat条件)。关键:每次二分枚举limit,按limit建图,需要注意的是每条逻辑语句对应两条边(相互对称,逻辑上互为假言易位),如:必需连通一个点,逻辑语句俩条:a-原创 2014-02-26 15:28:39 · 739 阅读 · 0 评论 -
有上下界网络流问题
转自:http://www.cnblogs.com/kane0526/archive/2013/04/05/3001108.html此类问题可以分为三小类问题:一、无源汇有上下界最大流二、有源汇有上下界最大流三、有源汇有上下界最小流 1、无源汇有上下界最大流 题目链接: sgu194 Reactor Cooling 题目大意:给n个点转载 2014-02-27 10:52:58 · 803 阅读 · 0 评论 -
SGU 194 无源无汇可行流求解
题意:n个点,m条边,每条边有容量限制 l--c,每个点满足容量平衡(流入等于流出),求可行解无源无汇可行流问题,建立以一个超级源点和超级汇点,由于原来最大流问题时候,流量下界其实为0,所以要转化,把边(设u-->v)的容量改为c-l,但是这样不平衡了,所以S流入v点l,u点流出到T要l,这样保证了u,v流量平衡,用数组sumin[i]记录下i点流入下限之和,最后超级源点流入i。最原创 2014-02-27 16:43:13 · 900 阅读 · 0 评论 -
图论专题练习
转自:http://blog.csdn.net/liuqiyao_01/article/details/8477827POJ 3013 - Big Christmas Tree基础 ACPOJ 3463 - Sightseeing中等 ACPOJ 3613 - Cow Relays较难 ACPOJ 3621 - Sightseeing Cows中等 ACPOJ转载 2014-02-27 16:57:22 · 776 阅读 · 0 评论 -
POJ 2396 有源有汇有上下界可行流问题
题意:给一个矩阵,给出每行每列之和,附加一些条件,如第i行第j列数必需大于(小于)多少。思路题解:矩阵模型,模拟网络流,行、列标号为结点,构图,附加s,t,s连行标(容量上下限每行之和(必需以这个值全部送过去),每个列标连向t(容量上下限每列之和)),其他每个行到列都有边(有限制的按限制来,无限制的自己添加)。由于s->网络->t,若有解,总流量f必为矩阵所有数之和,故添加边t-S原创 2014-03-02 10:57:49 · 934 阅读 · 2 评论 -
hdu3491最小割转最大流+拆点
题意:求最小割,即求最大流即可。此题之关键为拆点(限制在点),每条边都是双向边,注意一下。未1A原因:在拆点之后添加边的过程中,要注意,出去的是i`,进来的是i,!!所以,写addegde函数时候还是每次添加一单项边就好,之后手动调用,可以注意出入之边即可。简单题。#include//15ms#include#includeusing namespace std;int原创 2014-03-06 17:07:25 · 872 阅读 · 0 评论 -
1.飞行员配对 二分图匹配(输出方案)/最大流斩
构建二分图,新建超级源汇点,所有边权为1,跑一次dinic,最大流即可最大匹配,关键是方案输出,遍历所有边(除去关于s,t的边),满流的边即可一组匹配。#include#include#includeusing namespace std;int n,m;int nume;int e[10000][3];int head[105];const int inf=0x3f3f3f3f;原创 2014-03-11 15:17:13 · 1171 阅读 · 1 评论 -
hdu3987,最小割时求最少割边数
题意:求最小割时候割边最少的数量。算法:先求dinic一遍,跑出残网络,再把该网络中满流量(残量为0)的边残量改为1,其他边残量改为无穷,则再跑一次最大流,所得即为答案。(思,最小割有喝多组,但是要割边数量最少的,那么把满流的流量改为1,再跑一次最大流即可)。未1A原因:1*:添加边的时候,把双向边添加为一条(反向的流量上限==正向),这样不是不可以,但是由于后面用到要取有效边原创 2014-03-06 15:58:31 · 1342 阅读 · 0 评论 -
poj1149最大流经典构图神题
题意:n个顾客依次来买猪,有n个猪房,每个顾客每次可以开若干个房子,买完时,店主可以调整这位顾客开的猪房里的猪,共m个猪房,每个猪房有若干猪,求最多能卖多少猪。构图思想:顾客有先后,每个人想要的猪数量已经确定,显然要建汇点t,每个顾客连线t(以顾客为结点),权值为他想要买的猪数量(最多想要的都卖了,最大流之归宿,必思汇点!)然后,你想,每个顾客有先后顺序,前一个顾客开过的房原创 2014-03-08 20:36:36 · 829 阅读 · 0 评论 -
hdu1569 方格取数 求最大点权独立集
题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和。思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点集I覆盖所有边,点权之和最小),(对应于原题,就是求拿掉最小点集,这些点覆盖所有边,拿掉后,每个点必然两两不相邻,否则:假设u,v相邻,则u->v这条边未被覆盖,矛盾),在建立超级源汇点s,t,s连向原创 2014-03-08 12:07:30 · 1007 阅读 · 2 评论 -
ZOJ 3717 二分+2-sat判定。
好久没有2-sat了,此题当复习之用,二分求最大值+2-sat判断可行,此题主要跪于题意:The results should be rounded to three decimalplaces. You should promise that there is still no overlap for any two balloons after rounded.rounded是四舍五入原创 2014-03-28 12:14:25 · 753 阅读 · 0 评论 -
SGU101 求有重边的无向图欧拉迹
题意:好多木棒,俩端有数字(0--6)标记,按数字相同的端首尾相连成一条直线(木棒可以相同)。即求有重边的无向图欧拉迹。先判定是否为欧拉图,俩个条件,不说了。如果是欧拉图,输出路经。方法:dfs遍历边,回溯时候记录边,遍历过了就标记“双向边”.那么所记录的恰好是一条逆欧拉迹。不可以前进的时候标记,原因:有可能一笔画失败,导致边不连续,而回溯的时候记录,原因较复杂,大致证明如下:原创 2014-03-30 22:26:44 · 944 阅读 · 0 评论 -
POJ 2125 最小点权覆盖集(输出方案)
题意:给一个图(有自回路,重边),要去掉所有边,规则:对某个点,可以有2种操作:去掉进入该点的所有边,也可以去掉出该点所有边,(第一种代价为w+,第二种代价为w-)。求最小代价去除所有边。己思:点的权被分为出入?必然拆点啊!每个点一分为二,点权:出的为出点权,入的为入点权,原来边仍在,注意,这里(1-)->(1+),不多添加边,因为相当于求新图的最小点权覆盖集(覆盖所有边,每选原创 2014-03-13 16:06:38 · 1067 阅读 · 2 评论 -
有向图最小路径覆盖方法浅析、证明 //hdu 3861
路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联。对于一个有向无环图怎么求最小路径覆盖?先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii。若有边i--》j,则在二分图中,添加边 ii--》jjj(即原来每个点拆为一个入点和出点),这样构成二分图。则:最小路径覆盖数=原图顶点数-二分图最大匹配数。粗略解析证明:(设有n个顶点)原创 2014-04-21 16:23:10 · 1728 阅读 · 0 评论 -
最小费用最大流粗解 poj2516
最小费用最大流,一般解法如下:在流量基础上,每条边还有权费用,即单位流量下的所需费用。在最大流量下,求最小费用。解法:在最大流算法基础上,每次按可行流增广改为每次用spfa按最小费用(用单位费用)增广,每次按每条边一单位费用求到达终点的最小费用(最短路),那么每次找到“最短路”(只是一条路,不是多条(dinic每次可以增广多条)),之后按这条路最大可能流量增广(取这条路上残量最小的),直到原创 2014-05-17 16:37:16 · 992 阅读 · 0 评论 -
hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量。 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可。算法相对简单,但是注意几个细节:1:原图可能不连通。2:有的连通分量只有一个点,当舍去该点时候,连通分量-1;复习求割点的好题!#include#include#includeusing namespace std;i原创 2014-05-18 22:24:29 · 1108 阅读 · 0 评论 -
最短路中部分点只能从中任意选取K个问题
题意:给N个点,还有另外m个点(其中只能选K个),求最短路。思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其他点了),若该点是m个点中的,则count【i】=原来的+1;若不是,则继承原来的。出队时候限制一下,若大于K了,就停止拓展。原题:目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立原创 2014-07-16 10:59:29 · 1453 阅读 · 1 评论 -
2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683
本文原创于 2014-02-12 09:26。 今复习之用,有新体会,故重新编辑。2014-02-12 09:26:2-sat之第二斩!昨天看了半天论文(赵爽的和俉昱的),终于看明白了!好激动有木有!终于理解了赵爽的每一句话!并且用了200+行代码实现,A了!具体过程我是敲了帮天的代码啊!!!不容易啊!步骤如下:把相关问题编号为01 23 45....,(每个编号为一个命题)原创 2014-05-23 19:37:37 · 2041 阅读 · 0 评论 -
太空飞行计划 最大权闭合图
选了一个点,必需选择其他点,故题意为求一个闭合图(闭合图:在一个图中,我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终点(弧头)也在V中,则我们称V为闭合图。最大权闭合图即在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。),构图法:取起点s,连线去所有正权的点,所有负权的点连线到t,权值为绝对值,原图的边权值为inf,s-t最大流即为原创 2014-03-11 21:01:01 · 713 阅读 · 0 评论 -
2014湘潭全国邀请赛I题 Intervals /POJ 3680 / 在限制次数下取有权区间使权最大/小问题(费用流)
先说POJ3680:给n个有权(权 思路: 限制的处理:s-->开始流量为k,要求总权最大,即费用最大,所以费用取负,最小费用最大流即可。对于输入区间[a,b]:w,添加边:a-->b,流量为1,费用为-w。 对于点i,i+1,添加边,费用为0,流量无穷。显然这种处理,限制了区间最多取k次,(流量控制),跑最大流能走添加的边尽量走,且越大越好原创 2014-07-21 16:11:17 · 1529 阅读 · 0 评论 -
关于 最短路条数 和 边不可重复最短路条数问题 /hdu3599(边不可重复最短路)
最短路条数: 求一个图一共一几条最短路径,思路:先从终点跑一边最短路,记录终点到到所有点最短距离(d【i】),然后从起点出发,dfs 按d[i]走(必是最短路径),一句话:我到终点的最短路条数=我的所有孩子到终点的最短路条数之和,这样只需一遍即可。这不知道是不是叫记忆化搜索?边不可重复最短路径条数:(最短路+建新图之最大流) hdu3599题意:求1-->n最短路条数,所有路径边不可重复。思路:边不可重复??!!转为流量的为1 的话,求最大流啊(以后切记该方法,不可重复问题原创 2014-05-29 10:50:39 · 1699 阅读 · 0 评论 -
hdu4862 2014多校B题/ 费用流(最优情况下用不大于K条路径覆盖)(不同的解法)
题意: 一个数字矩阵,可以出发K次,每次可以从右边或者下面走,要求(在收益最大情况下)覆盖全图,不能则输出-1。(规则:每次跳一步的时候若格子数字相等则获得该数字的能量,每跳一步消耗距离的能量)。每个格子走且仅能走一次。选 显然用拆点为二分图。一种解法:边(流量,费用) 源点向X部连边(1,0)Y部向汇点连边(1,0)X到Y,若能到,则有边(1,消耗-获得)。原创 2014-07-24 19:49:25 · 1040 阅读 · 0 评论