09 2014 档案
摘要:解决上下界网络流的一般思路: 解决这类问题的关键是如何去掉下界带来的麻烦。下面的哈工大出版的《图论及应用》里的思路。1、网络的必要弧和构建附加网络前一个数是下界,后一个数是上界。下面的边是必要弧,其权值为下界。上面的边容量为上界与下界的差。添加附加源点Y,附加汇点X(别弄错了),为的权值正无穷。对...
阅读全文
摘要:图的连通性问题包括:1、强连通分量。2、最小点基和最小权点基。3、双连通。4、全局最小割。5、2-SAT一、强连通分量强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具。有三种算法:1、Kosaraju算法。对原图和反图分别进行一次深度优先搜索。2、Tarjan算法。用了时间戳。3、Garb...
阅读全文
摘要:一些定义:割点集合(割集):在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。点连通度:最小割点集合中的顶点数。割边集合:如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。边连通...
阅读全文
摘要:最短路径问题包括:1、单源最短路。2、任意两点间的最短路。3、次短路和k短路。4、差分约束系统。5、DAG图上的单源最短路。6、最小环。一、单源最短路算法:Dijkstra、Bellman-Ford、SPFADijkstra:除了路径记录和更新距离数组的部分意外,和Prim算法的实现完全一样。使用邻...
阅读全文
摘要:树的定义:连通无回路的无向图是一棵树。有关树的问题:1、最小生成树。2、次小生成树。3、有向图的最小树形图。4、LCA(树上两点的最近公共祖先)。5、树的最小支配集、最小点覆盖、最大独立集。一、最小生成树解决的问题是:求无向图中边权值之和最小的生成树。算法有Kruskal和Prim。Kruskal使...
阅读全文
摘要:题意:http://www.phpfans.net/article/htmls/201012/MzI1MDQw.html 1、在一个会议室里有n种插座,每种插座一个; 2、每个插座只能插一种以及一个电器(或者适配器); 3、有m个电器,每个电器有一个插头需要插在相应一种插座上; 4、不是所有...
阅读全文
摘要:题意: 最少需要几个点才能使得有向图中1->n的距离大于k。分析: 删除某一点的以后,与它相连的所有边都不存在了,相当于点的容量为1。但是在网络流中我们只能直接限制边的容量。所以需要拆点来完成对的点容量的限制。对于边i -> j,先建边i ->i',再建i'->j。i ->i'只能建一次,容量为...
阅读全文
摘要:PS:看了百科你会晕,你会感觉这东西好难。 百科传送阵:http://baike.baidu.com/view/7343867.htm?fr=aladdin最大团:一幅无向图的顶点最多的(最大)完全子图。完全图就是每个点的度数都等于n-1的无向图。百科传送阵: http://baike.baidu....
阅读全文
摘要:题意: N个箱子排成一个圈,所有的箱子里的巧克力的数量加起来不大于N,每次可以把箱子里的巧克力向旁边的箱子转移(两个方向),问要让每个箱子里的巧克力不大于1的最小步数。分析: 把巧克力大于1的箱子拆为 pi-1 个箱子(点),向没有巧克力的箱子建边,权值为最短距离。因为是一个圈,任意两点之间有两...
阅读全文
摘要:PS:好题。不看题解绝对AC不了。题解来源:http://blog.csdn.net/niushuai666/article/details/7176290http://www.cnblogs.com/wally/archive/2013/04/02/2995846.html题目大意: 现在有N个...
阅读全文
摘要:题意: 给出n个城市和m条路,每个城市只能经过一次,想要旅游所有的城市,求需要的最小花费(路径的长度)。分析: 做题之前,首先要知道什么是完美匹配。不然题目做了却不知道为什么可以用这个方法来做。完美匹配{X,Y| E},X、Y集合都有n个点(必须相等),它们必须一对一的匹配,并且所有点都要匹配。...
阅读全文
摘要:题目大意: 统计相邻(上下左右)的‘#’的对数。解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图。就是行+列为奇数的作为X集合,偶尔作为Y集合,都是‘#’就连边。最后求最大匹配。 数据有点大,直接建图会出错(我试过)。可以按照‘#’出现的...
阅读全文
摘要:中文题目,题意大家都明白。 看到“不同的行和列”就觉得要用二分匹配来做。要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成。 枚举过程是这样的,在输入的过程可以记录下边权的最大值MAX和最小值MIN。那么他们的边权的差值的最大值为right = MAX -MIN ,最小值left ...
阅读全文
摘要:对多校赛的题目,我深感无力。题目看不懂,英语是能懂的,题目具体的要求以及需要怎么做没有头绪。样例怎么来的都不明白。好吧,看题解吧。 http://www.cnblogs.com/kane0526/archive/2013/07/21/3203992.html题目大意: 把一幅有向图中的点最少...
阅读全文
摘要:题目大意: 给定一个元素的值只有1或者0的矩阵,每次可以交换两行(列),问有没有方案使得对角线上的值都是1。题目没有限制需要交换多少次,也没限制行交换或者列交换,也没限制是主对角线还是副对角线。虽然没限制,但是解法都是差不多的。 这是09年的多校题目,对一般人来说,不看解题报告是无法做出来的...
阅读全文
摘要:此题是我AC的HDU的201道题目。泪流满面啊! 字典序最大(最小)真是个烦人的东西。 学生i与其对应的分数区间的每个点连一条边。字典序最大,编号最大的学生开始匹配。 HK无法AC啊,试了很久。我不会说,能过样例。 最后用了DFS版的匈牙利算法过了。人们说这个代码简洁。不过我一般都用HK...
阅读全文
摘要:对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了。http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车站有一个固定的发车时间,有二维起点和终点,花费的时间是两点的曼哈顿距离,即|x1-x2|...
阅读全文
摘要:题目分析: 一个人要不是爱狗讨厌猫的人,要不就是爱猫讨厌狗的人。一个人喜欢的动物如果离开,那么他也将离开。问最多留下多少人。 思路: 爱猫和爱狗的人是两个独立的集合。若两个人喜欢和讨厌的动物是一样的,那么就建一条边。留下多少人,就是求最大独立集。 最大独立集= 顶点数 - 最...
阅读全文
摘要:此题就是求最大匹配。不过需要判断是否构成二分图。判断的方法是人选一点标记为红色(0),与它相邻的点标记为黑色(1),产生矛盾就无法构成二分图。声明一个vis[],初始化为-1。通过深搜,相邻的点不满足异或关系就结束。如果没被标记,就标记为相邻点的异或。 1 #include 2 #inc...
阅读全文
摘要:题目大意: 在 n*m在矩阵中,有一些点被标记为黑色,问可以多少对相邻的没有重复的白色块。思路: 看上去与二分匹配毫无关系。但是没有其他好的解法,转化为二分匹配是正解。二分匹配的条件是{X,Y|E}, X(Y)集合内的元素没有关系。这题可以把i+j为奇数归为X,偶数则归为Y。从头开始扫描,只要某...
阅读全文
摘要:二分图模型中的最大独立集问题:在二分图G=(X,Y;E)中求取最小的顶点集V* ⊂ {X,Y},使得边 V*任意两点之间没有边相连。 公式: 最大独立集顶点个数 = 总的顶点数(|X|+|Y|)- 最大匹配数 poj3692 题意:幼儿园有G个小女孩和B个小男孩,小女孩彼此之间互相认识,小...
阅读全文
摘要:有向无环图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次)。 最小路径覆盖就是找出最小的路径条数,使之成为原图的一个路径覆盖。 公式:最小路...
阅读全文
摘要:二分图模型中的最小顶点覆盖问题:在二分图G=(X,Y;E)中求取最小的顶点集V* ⊂ {X,Y},使得边 e ∈ E都至少有一个顶点 v ∈ V*相关联。 简单地说,最小点覆盖就是从图G的顶点中取最少的点组成一个集合,使得图中所有的边都与取出来的点相连。 有一定理:最小顶点覆盖问题与最大匹配...
阅读全文
摘要:题目大意: 在一个有向图中,求经过所有点的最小圈。 思路: (如果是用二分图的完美匹配来做,那么直接上模版就好了)。http://www.cnblogs.com/Potato-lover/p/3991640.html 用最小费用最大流的思路如下: 首先是每个点都只能走一...
阅读全文
摘要:虽然题目求的是最大费用,但是我们可以通过转换就变为最小费用。用一个比最大值更的数与每个数的差作为费用值。最后处理回来就i可以了。有些人用直接每个值都乘以-1,这样更简单。 做这题,我对为什么不拆点就会错这个问题想了很久,也问了一些人。最后得出了一些知识。 在《挑战程序设计竞赛》的214页有讲...
阅读全文
摘要:做最大流题目的时候会遇到一种需要用二分查找的题型: (poj2455) 一张无向图中有 N 个点,M 条边,每条边都有一个权值,且每条边只能用一次,要求找出 T 条从 1 到 N 的路径,使这 T 条路径所经过的边中,权值的最大值最小。 转化为最大流模型:T就是最大流,每条边只能用一次在...
阅读全文
摘要:此题的大意:给定一幅有向图,求起点到终点(都是固定的)的不同的最短路有多少条。不同的最短路是说不能有相同的边,顶点可以重复。并且图含有平行边。 看了题以后,就想到暴力,但是暴力往往是不可取的。(暴力的最坏情况下的时间复杂度是O(n^3))。我说的暴力是求一次最短路以后,把最短路上的边全部去掉(...
阅读全文
摘要:一开始不看题解,建图出错了。后来发现是题目理解错了。 if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses. 题目中的这句话非常关键,没理解就错掉了。有很多人写的题解只告诉我...
阅读全文
摘要:我是按照图论500题的文档来刷题的,看了这题怎么也不觉得这是最大流的题目。这应该是题目做得太少的缘故。 什么是最大流问题?最大流有什么特点? 最大流的特点我觉得有一下几点: 1、只有一个起点、一个终点。如果不是,我们可以构造超级源点,超级汇点。 2、边的容量有上限(有上下限的是另...
阅读全文
摘要:这是09年的多校联赛题目,比10年的难度要大。如果没做过hdu3572,建议先去做。有了解题思维再来做这题。 这题与hdu3572类似。但是1 #include#include#includeusing namespace std;const int N=2000,M=1000000, INF...
阅读全文
摘要:PS:多校联赛的题目质量还是挺高的。建图不会啊,看了题解才会的。 参考博客:http://blog.csdn.net/luyuncheng/article/details/7944417 看了上面博客里的题解,思路就有了。不过建图还是有点麻烦。我把源点设为n+1 (不想从0开始,不修改模版...
阅读全文
摘要:已经有人做过很好的总结了。可以参考http://www.cnblogs.com/buptLizer/archive/2012/04/15/2450297.html 欧拉图的几种题型: 1、一笔画问题。(1)一个图需要几笔完成。(2)判断一个图是不是欧拉通路,有的严格要求是欧拉回路。(注:...
阅读全文
摘要:PS:今天(2014.10.27)准备PPT,明天在组合数学课上与大家一起分享一下2-SAT。我以为是一件简单的事情。但是,当我看了自己这篇博客以后,发现居然还是不懂。很多资料不全,也没仔细讲。整理了一下,又修改了。尽量让自己下次再看到这博客的时候,一遍下来就能懂。虽然引用了别人的博客,我尽量讲...
阅读全文
摘要:百科是这样说的:如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi i, 1、由xj - xi >=w得到xj >= xi + w,建立一条从xi->xj的边权为w的边。然后从小到大求最长路算法。 2、由xj - xi >=w得到xi xi的边权为-w的边。然后从大到小求最...
阅读全文
摘要:求最短路的算法最有名的是Dijkstra。所以一般拿到题目第一反应就是使用Dijkstra算法。但是此题要求的好几对起点和终点的最短路径。所以用Floyd是最好的选择。因为其他三种最短路的算法都是单源的。 输出字典序最小的路径则需要修改模版。#include#include#include#i...
阅读全文
摘要:PS:在贴出代码之前,我得说明内容来源——哈尔滨工业大学出版的《图论及应用》。虽然有一些错误的地方,但是不得不说是初学者该用的书。 从效率的角度来说,Kosaraju 0;i--) if(!vis[dfn[i]]) { cnt=0; ...
阅读全文
摘要:百度一下,发现这方面的资料太少。最小权点基貌似没有。 这两类问题都需要强连通分量来解决。强连通的模版(三个)在我博客的模版分类中有。点基:在有向图G=(G,V)中,B是V的子集。如果对于任意的y属于V,不属于B,都存在一个x属于B,使得x是y的前代(有一条边从x到y),则称B是一个点基。PS:...
阅读全文
摘要:此段略过。看完题目,觉得这真的是一道好题目。自己有想法,但是实现起来却很难。看题解,写代码,然后写题解,意义何在?我不认为自己总是这么弱。就算抄代码,我也要有自己的理解。菜鸟总会成长。 首先,题目必须读懂。起点是1,终点是n,并且一定有解。对于一个点(城市),如果它有魔法保护,必须解除对它的所...
阅读全文
摘要:最小环用floyd改编。 hdu1599特殊一些。要求至少有三个不同的点,并且除了起点与终点重合外,中间不能有环。有点很奇怪,最大值不能为0x3f3f3f3f。 poj1374就没那么讲究。 1 //hdu1599 2 #include 3 #include 4 #include 5 #...
阅读全文
摘要:求次小生成树的步骤是: 1、求出最小生成树MST,用一个矩阵maxe[u][v]记录在MST中连接u-v的路径中权值最大的边. 2、枚举所有不在T中的边u-v,加入边u-v,删除权值为max[u][v]的边,不断枚举找到次小生成树. 由于邻接矩阵建图无法储存平行边(重边),我们在建...
阅读全文

浙公网安备 33010602011771号