
图论
文章平均质量分 66
泳裤王子
这个作者很懒,什么都没留下…
展开
-
Floyd
<br />用于求每两点间最短路。<br /> <br />算法很简单。<br />百度百科<br /> <br />代码:<br /> 本来期待用-1代替INF,做dist的初始标记量,以方便用memset来减少初始化的二重循环。但是发现,原来的经典算法之所以用INF来做初始,就是减少对特殊值的判断,让dist直接相加,就算是特殊的INF也不影响结果(记得数构里教的“哨兵”吗?)。但是,两INF相加可能造成整数溢出。所以在方法二中把dist初始化为INF/2。(也有介绍说把INF设得比题目数据原创 2011-05-17 16:23:00 · 520 阅读 · 0 评论 -
[2-sat][裸题] HDU3062 Party
这题只判断可行性,不用输出解,应该是2-sat入门题里最水的一道....代码://n个元素。i=0~n-1.//i表示0、i+n表示1、i+2n表示0'、i+3n表示1'。//1wa。这题竟然有多组数据。...#include#include#includeusing namespace std;#define MAXN 4002 //4倍的点//#define MA原创 2011-10-28 11:56:21 · 1233 阅读 · 0 评论 -
有向图的强连通分量 SCC tarjin算法
这个本来是暑假的时候学图连通性的时候一起学的。没整理出来,又有些遗忘。现在在 2-sat 里用到它来缩点。先写个简略版的。算法:dfn[]、low[]初始为++num(排除0),tarjin到u入栈s,ins[u] = 1;遍历u的所有邻点v(邻接表),对没有tarjin的点(dfn[v]=0),tarjin(v),low[u] = min(low[u], low[v])。原创 2011-10-28 10:25:40 · 2063 阅读 · 0 评论 -
[图论] 2-sat 入门
ps.写topsort输出解的时候各种混乱。还是没理解透。写点东西理清思路先。_10_282-sat 就是n个元素,可取0或1(2的含义),然后加上一些附加条件。问题的解为n个元素的取值。感觉就是离散数学里面的数理逻辑什么的,一堆0、1。问题的做法是通过建图来解。一般将n个元素拆点为2*n个点,表示取0或取1。然后,根据条件连边,边u->v表示,u发生,v一定发生。(这原创 2011-10-28 17:08:49 · 507 阅读 · 0 评论 -
[2-sat][topsort输出解] POJ 3648 Wedding
2-sat 基本是有三类题型,一种只判定解是否存在,一种判定+二分答案求最佳,一种判定解并输出其中一组解。Wedding 这题是典型的第三种类型。ps. 最近太忙了,这题是前天A的,暂时先要把 2-sat 放一放。然后到时候再回来整理下,形成要用到的模板带出去就行了,如果考到就是看临场建图了。于是这题先记录下来。另外最后输出还是有点疑问的,mark一下,输出的新娘一边,是删除的scc点原创 2011-10-30 02:08:10 · 1008 阅读 · 5 评论 -
二分图的最小点覆盖跟最小点权覆盖
又复习了下二分图的内容。发现最小点覆盖、最小点权覆盖最大独立集、最大权独立集。都是相对的嘛,前者还都是后者的特殊情况,即点权为1......顺便复习一下:二分图最小覆盖数=最大匹配数M二分图G的最大独立集U = 二分图G的顶点集V(即X+Y) -最大匹配边集M,加上点权后,要建网络用求最大流,最小点权覆盖 = st最小割最大点权独立集 = 所有点权原创 2011-11-01 20:42:17 · 1009 阅读 · 0 评论 -
[网络流][最大点权独立集] 方格取数
预备知识:点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该集合内。最小点权覆盖集:在带点权无向图G中,点权之和最小的覆盖集。点独立集:无向图G的一个点集,使得任两个在该集合中的点在原图中都不相邻。最大点权独立集:在带权无向图G中,点权之和最大的独立集。 // 定理: // 1. 最小点权覆盖集=最小割=最大流 // 2. 最大点权独立集=总权-最小原创 2011-11-01 13:00:17 · 1346 阅读 · 0 评论 -
图的BFS - HDU 1241/HDU 2612/POJ 3984
这完全是回顾以前的知识了...写的时候一些似曾相识的手法渐渐冒出来........- -然后其实题目都很水....但是看在我WA到现在的份上...贴出来....HDU 1241#include#include#include#include#include#include#include#includeusing namespace std;inline in原创 2012-08-03 01:51:03 · 666 阅读 · 0 评论 -
[网络流] 最大流 最小费 回顾
1/最大流容量网络作为问题的有向图. 要有反向弧用于回流, 且反向弧容量为0.残量网络, 残量=容量-当前流.(容量/当前流/残量都有反向弧) 残量>0,代表可达, 所以要不断在残量网络中找 s 到 t 的可达路. 称为增广路.什么叫增广路? 就是当你把这条路加进来后, 会使你的结果更优. (在最大匹配中交错轨就是它的增广路).找到增广路怎么更新当前流?我们只需要维护一个 d[原创 2012-08-05 14:37:17 · 1199 阅读 · 0 评论 -
POJ 1274 / POJ 1469 / POJ 2239 二分图最大匹配
都是一些很裸的二分图最大匹配.纯当复习了.POJ 1274#include#include#include#includeusing namespace std;#define bug(s) cout<<#s<<"="<<s<<" "inline int Rint() {int x; scanf("%d", &x); return x;}#define MAXN原创 2012-08-05 17:46:53 · 687 阅读 · 0 评论 -
POJ 1149 PIGS
最大流. 注意有可能有多个人拥有同一个门的钥匙, 而且客人是按题目输入的顺序来的.所以客人间要连边.丢了个sap模板代码:#include #include #include #include #include #include using namespace std;//调用方法://init()初始化,addEdge()增加边,maxFlow()求最大流原创 2012-08-05 17:52:08 · 406 阅读 · 0 评论 -
POJ 2516 Minimum Cost
最小费.主要是这题有K种货物搞得关系很复杂, 开始建图卡住, 其实把k种货物分开来建k次图跑k次就好了.然后判断最大流和是否满足需求, 若满足则输出最小费和, 若不满足, 则输出-1.貌似还可以用KM代码://最小费用流// 建k次图... 最小费#include#include#include#includeusing namespace std;co原创 2012-08-05 18:01:50 · 484 阅读 · 0 评论 -
POJ 2289 Jamie's Contact Groups 多重匹配+二分
题目大意是给你一堆联系人, 每个人有几个标签, 然后让你将他们分组(每组里的人要标签相同), 问其中人最多的组的人数最少是多少.有点像鸽巢的感觉...开始我想了一个, 以为是每次求最大匹配, 然后把已盖点的邻边全删掉, 然后看能求几次最大匹配....WA之...其实显然是错的, 因为每次删去一堆边你不能保证这样的匹配是最优的.然后发现有多重匹配这种东西....其实也就是给定{V}最多能原创 2012-08-05 18:18:34 · 2807 阅读 · 0 评论 -
【专辑】图论复习
updating ... 05.09...08.08...10.28... 存图方法。零、连通性 无向图割点、桥 有向图强连通SCC一、最短路Dijkstra +heapBellman-Ford && SPFA Floyd最短路算法统一归纳 二、拓扑排序 toposort 三、二分图原创 2011-05-09 19:22:00 · 845 阅读 · 0 评论 -
HDU 4370 0 or 1
这题答案就是 min(1~n最短路, 包含1的最小环+包含n的最小环). (最小环不包括自环).这题没什么, 就是求最小环的时候要注意下.1/ 如果用邻接表, 那dist数组初始化肯定是INF, 但注意dist[st] 还是初始化为0. 不然之后无法拓展其他点. 然后在relax的时候 另外加一句 if(v==st) circle = min(circle, dist[u]+a[e].w原创 2012-08-19 16:36:26 · 494 阅读 · 0 评论 -
HDU 4360 As long as Binbin loves Sangsang
这题调到后面真是调疯了.....一直wa啊wa................卧槽, 尼玛的原来是手敲队列的时候, 队列大小开小了, 因为spfa一个结点能多次进入队列......这他妈都能错........卧槽...........代码:#include#include#include#include#include#include#include#include原创 2012-08-21 04:07:02 · 465 阅读 · 0 评论 -
[图论][网络流] 关于最大权闭合图
预备概念:网络的割 如果去掉某弧集s中的所有弧以后源点s和汇点t不再连通,则把弧集s称为网络的s-t割。割的容量为其中所有弧的容量之和。去掉割以后s所在的连通分量叫做S集,t所在的连通分量叫做T集。最小割 显然所有弧的集合就是一个割,它是容量最大的割。我们自然希望得到最小原创 2011-10-06 18:44:47 · 988 阅读 · 0 评论 -
2011阿里巴巴程序设计公开赛 / 1004 Level up
比赛完玩了一天游戏(颓~)看到有人要这题的标程,贴一下吧(除了会贴标程你还会干吗~)~//-----------------类型:线段树标程:#include #include #include #include #include #incl原创 2011-08-20 14:07:57 · 1149 阅读 · 1 评论 -
正权图单源最短路(SSSP)- Dijkstra算法
引言:DAG上的最短路可以用dp解得,容易得到状态转移方程。但如果图中可以有环,就要使用其他算法了。这里先考虑边权均为正的最短路问题。Contents:一、 普通的dijkatra实现 O(n2)二、采用邻接表三、 基于优先队列的Dijkstra O(mlogn) 给出样例问题(图片引自Tanky Woo):对下图中的有向图,用Dijkstra算法计算从任意源顶点到其它顶点间最短路径。输入: 671 2 101 4 301 5 1002 3 503 5 104 3 204 5 6012345输出:No.1原创 2011-04-05 22:00:00 · 4301 阅读 · 1 评论 -
拓扑排序 toposort
大意: 对于DAG(有向无环图),把图中所有结点排序,使得每一条有向边(u, v)对应的u都排在v的前面。直观地说,就是用一条线把有向图中所有点连起来(当然是遵循有向边的)。注:①有环图是不存在拓扑排序的。(因此可以用来判断图是否有环)。 ②一个DAG可能有多个拓扑序列。实现: 主要有两种实现方法:① bfs版:(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它. (2)从网中删去该顶点,并且删去从该顶点发出的全部有向边. (3)重复上述两步,直到剩余的网中不再原创 2011-04-06 15:44:00 · 902 阅读 · 0 评论 -
单源最短路径算法 Bellman-Ford && SPFA 及 最短路算法统一归纳
为避免各种求最短路的方法混淆,开始之前先做个归纳。① BFS - 无权图 (有向或无向,有环或无环)- 对于树的bfs,无需判重,因为根本不会重复。对于图的bfs,要有vis[]进行判重,不然一个点可能被多次拓展,极大地浪费时间空间。② dp - 有向无环图(DAG,带权或不带权)- 很多问题可以转换成DAG上的最短路(当然还有最长路)问题,这个时候,一个点就是一个状态,根据状态转移方程计算,属于最优化问题。对于这里非隐式的图(存在显式结点的),是可以用下面其他最短路算法的。③ Dijkstra - 正权图原创 2011-04-06 18:16:00 · 2572 阅读 · 3 评论 -
差分约束系统 - 最短路
<br /> 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。<br />求解差分约束系统,可以转化成图论的单源最短路径问题。<br /> 观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v]。因此,以每个变量x原创 2011-04-06 20:14:00 · 529 阅读 · 0 评论 -
UVA 10034 - Freckles
Q10034: Freckles給你一些點的座標,把這些點用墨水畫直線連起來,使得所有的點最後都連在一起。你的任務是寫一個程式找出墨水畫出的長度最小是多少?Input輸入的第一列有一個整數,代表以下有幾組測試資料。每組測試資料的第1列有一個整數n(0輸入的第一列與第一組測試資料間空一列,各測試資料間亦空一列。請參考Sample InputOutput對每一組測試資料輸出墨水畫出的長度最小是多少。測試資料間亦請空一列。Sample Input231.0 1.02.0 2.02.0 4.021.0 1.02.0原创 2011-04-09 23:47:00 · 882 阅读 · 0 评论 -
UVA 10048 - Audiophobia
<br />题目大意:给出一个图,求某点到某点所必须忍受的最小噪音(即所经过路径的相邻两点的权的最大值最小)。<br />中文翻译<br />题目链接<br />题目类型:图论 / Floyd<br /> <br />题目分析:<br />①虽然做的是图论专题,但是开始还是觉得可以dp(后来证明我之前没有充分理解所谓“松弛技术”)。结果是写了一个可以过样例但是wa的dp。于是后来分析,关键点是两个相邻指标值,它们是相互依赖的,具体的说,假设有1点和2点它们相邻,则算d1的值时要根据d2的值算一次,但是d2的原创 2011-04-10 02:22:00 · 734 阅读 · 0 评论 -
XDUOJ Problem 1082 - Let's SPFA II
<br /><br />Problem 1082 - Let's SPFA II <br />Time Limit: 1000MS Memory Limit: 65536KB Difficulty: <br />Total Submit: 185 Accepted: 17 Special Judge: No <br />Description<br /><br /> 邮递员去送信,他初始在街道口S,要给A,B两个街道口送信,你的任务很简单,计算从S出发按任何顺序访问A,B, <br /><br原创 2011-04-10 17:39:00 · 626 阅读 · 0 评论 -
二分图最大匹配 - 匈牙利算法
<br />问题描述:<br /> X集合(编号1~m),Y集合(编号m+1~n)。n,m<100. 给出若干组合(x, y)(相当于映射x->y),问最都能同时有几个组合(分配)。<br /> <br />分析:<br />题目可能简化描述得不太好,这显然是一个二分图最大匹配的问题。(二分图)<br />可以用匈牙利算法,或者网络流来求解。这里介绍匈牙利算法。<br />匈牙利算法的核心就是找增广路。不断找增广路,然后更新现有匹配M(M可以看成是X->Y的一个特殊的映射关系),每次更新,都能使匹配数增加一原创 2011-04-17 00:40:00 · 733 阅读 · 0 评论 -
MST Kruskal普遍实现
#include#include#include#includeusing namespace std;#define MAXN 10000#define MAXM 1000000#define INF 1<<30//int first[MAXN];struc原创 2011-08-08 00:38:39 · 690 阅读 · 0 评论 -
关于图的存储方法 (静态邻接表、前向星、边集数组)
一、邻接矩阵(不多说了) G[u][v]二、邻接表 1、动态链表(指针) 一个数组表头(u)+ struct结点(v),相链,若有权值等信息再在结点里加相应域。 2、静态链表(数组)原创 2011-08-07 17:34:23 · 6301 阅读 · 1 评论 -
POJ 3522 Slim Span
水题,基本是裸的kruskal,不多说了。#include#include#include#includeusing namespace std;#define MAXN 102#define MAXM 102*101/2#define INF 1<<原创 2011-08-08 00:40:26 · 566 阅读 · 0 评论 -
POJ 1325 Machine Schedule
在网上搜的二分图模板题。题意: A、B两个机器各自有不同的工作模式,给出一个工作序列,每项工作,A、B在各自的某种特定模式下可以完成。但是,机器开始的时候模式都为0,换模式,需要一次restart,要求总共的restart次数最少是多少。类型:二分图最大匹配 / 最小点覆原创 2011-08-17 16:26:17 · 469 阅读 · 0 评论 -
HDOJ 1068 Girls and Boys
题意:一坨男孩和女孩,给你一些关系对,表示他们会谈恋爱,求一个最大的子集,令其中的男孩女孩不会谈恋爱。类型:二分图 / 最大独立集 / 匈牙利分析:题目是明显的二分图模型,但是输入没有指明那些是男孩/女孩。所以要拆点,把 i 拆成 i 跟 i' 分别放入X、Y,构造二分图原创 2011-08-18 02:52:37 · 874 阅读 · 0 评论 -
二分图相关总结 8.18
二分图相关泳裤王子原创,转载请注明出处 http://blog.csdn.net/tclh123/article/details/6696815 二分图G 顶点集分成 U、V 互不相交。 边集E = (U,V)匹配M 子原创 2011-08-18 02:58:29 · 698 阅读 · 0 评论 -
无向连通图的割点、桥
无向连通图的割点、桥泳裤王子原创,转载请注明出处 http://blog.csdn.net/tclh123/article/details/6705392预备知识: 割点集合 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这原创 2011-08-21 00:40:53 · 9157 阅读 · 1 评论 -
基础最短路算法【渣】
重新手敲下最短路的代码。。bellman-forddijkstrafloydspfa(bellman-ford+queue)dijkstra+heap(priority_queue)怕自己堆敲不出来 - -........用的STL。拿 HDOJ 2544 验的代码。#include#include#include#include#include#incl原创 2013-05-18 20:53:20 · 895 阅读 · 0 评论