图论初步
帐下幕僚
我只是一个普普通通的大学学生,我来到这里是想获得我在学校所不能得到的知识。
展开
-
poj2253Frogger(最短路变形)及poj1797Heavy Transportation(最大生成树)
题目大意,有两只青蛙,分别在两个石头上,青蛙A想要到青蛙B那儿去,他可以直接跳到B的石头上,也可以跳到其他石头上,再从其他石头跳到B那儿,求青蛙从A到B的所有路径中最小的Frog Distance,定义Frog Distance为从A到B的一条路径中所跳的最大距离,例如,如果从A到B某条路径跳的距离是9,1,6,5,则Frog Distance就是9,注意每输出一个答案还要再空一行。 其实这道题就原创 2016-08-04 16:54:36 · 304 阅读 · 0 评论 -
acm-图论的一些概念及性质
图论的一些知识点,先mark一下§1图论点、边集和二分图的相关概念和性质 点覆盖、最小点覆盖 点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。。极小点覆盖(minimal vertex covering):本身为点覆盖,其真子集都不是。最小点覆盖(minimum vertex covering):点最少的点覆盖。点覆盖数(vertex covering n转载 2016-08-31 21:06:28 · 1530 阅读 · 0 评论 -
poj3207 Ikki's Story IV - Panda's Trick(2-sat)
看了半天,看不懂题意。 题意 在一个圆上分布有n个点,现在要在这n个点之间连上m条边,每条边可以从圆内连接,也可以在圆外连接,每个点只能连接一条边,求是否存在连接方案能使得这m条边不相交。 看图容易懂题意。。。。。。 那么 对于两条线(这道题的节点可以认为是线,i<<1表示第i条线外连,i<<1|1表示第i条线内连。),矛盾的必要条件是(不妨设line[i].a< line[j].a原创 2016-08-22 16:03:19 · 320 阅读 · 0 评论 -
2-sat入门(例题hdu1814,poj3648)持续更新
2-sat问题描述2-sat问题是这样的:有n个布尔变量xi,另有m个需要满足的条件,每个条件的形式都是“xi为真/假或者xj为真/假”。比如“x1为真或者x2为假”。注意这里的“或”是指两个条件至少一个是正确的。由于在2-SAT问题中,最多只对两个元素进行限制,所以可能的限制关系共有11种: A[x] (1) NOT A[x] (2) A[x] AND A[y] A[x] AND NOT原创 2016-08-23 10:32:50 · 433 阅读 · 0 评论 -
poj3678Katu Puzzle(2sat入门)
这道题算是2sat建图入门题。 把6种逻辑表达式转化为有向图 2-sat就是合取范式 1.a&&b=1就相当于是a和b两个析取式的合取范式,而a又可以写成a||a。 2.a&&b=0 ==》 !a||!b=1 3 a||b=1 4 a||b=0 ==》 !a&&!b=1 同1 5 a^b=1 ==》(!a&&b)||(a&&!b)=1数理逻辑的知识可以推出原创 2016-08-25 11:51:48 · 248 阅读 · 0 评论 -
hdu2732Leapin' Lizards(Dinic)
刚开始想这道题想了很久,然后就有个思路,没立即敲。 然后敲的时候将起跳后忍受能力减1,记为降落时忍受能力减1。 增加一个源点n*m * 2和汇点n *m *2+1。 首先,对于每个点node,将其分为两个点node1和node2,node1连向node2的权值就等于这个点的承受能力(当然承受能力为0就不连了,因为没有柱子),然后如果可以从i跳到j,就将i2连向j1,权值无穷大,这里可以是40原创 2016-09-16 23:20:15 · 359 阅读 · 0 评论 -
hdu5876Sparse Graph(求补图的最短路)
网赛的时候没做出来,后来看题解懂的。 首先将所有节点都放进集合a,表示未求出最短距离。 由于以S为起点,所以dis[S]=0,从集合中将其删除,扔进队列。 每次跑队列的时候,取出首元素u,将集合a遍历一边,如果集合中的元素x与其没有边相连(用set存边,这样可以较快判断),那么dis[x]=dis[u]+1。并将其扔进队列,从集合中删除它。#include <iostream>#includ原创 2016-09-20 15:29:59 · 267 阅读 · 0 评论 -
hdu5294(Tricks Device)题解
题意:Innocent Wu只能走最短路, 两问:1,Dumb Zhang要阻止他找到自己,最少需要切断多少路。 做法:把最短路都找出来然后建图,然后求图的最小割(最大流等于最小割) 2,Dumb Zhang最多切断多少路但Innocent Wu仍能找到Dumb Zhang。 做法:在最短路的图上找出起点1能到终点n经过原创 2016-09-23 20:32:18 · 288 阅读 · 0 评论 -
hdu1151Air Raid poj2594Treasure Exploration题解
Air Raid 题目的意思就是给一个有向无环图,求从最少的点出发,不能重复的走完所有点。其实就是有向无环图的最小路径覆盖。 有向无环图的最小路径覆盖=节点数-匹配数(拆点)//建图,有向无环图的最小路径覆盖=节点数-匹配数(拆点)#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#i原创 2016-09-26 23:08:52 · 269 阅读 · 0 评论 -
Jzzhu and Cities( cf450D) 最短路
最初的思路: 先建最短路的有向图L(同时为无环图,根为1),然后把图L按以下赋值, 如果为铁路,赋值 1;否则赋值 0。 记录每个点两个值, 入边为铁路的数目sum,入边的是否只有铁路mm(当全是铁路时,显然要留下一条铁路,当有公路时,当然铁路一条都不能留)。 这样,对于每一个点所连的铁路的最多能去掉的个数就等于sum-mm, 此时从根开始深搜,计算sum和mm。然而,t(dijkstr原创 2016-12-07 22:14:54 · 290 阅读 · 0 评论 -
hdu2819棋盘游戏(二分图匹配)
二分图匹配原创 2016-08-31 17:52:17 · 317 阅读 · 0 评论 -
uva11090 Going in Cycle!!题解(负环)
本来以为是Floyd求最小环的模板题,然而,然而,似乎不是。但其实这道题求的是边权平均值最小的环,所以貌似不能用Floyd,因为它不一定能遍历 图中所有的环,多么痛的领悟,一个晚上,调不出来。 也或许是我姿势不对。(代码在最后面,有大神能指出我错在哪里,必万分感谢) 正确做法:二分+SPFA 二分答案,将所有边权减去二分的那个值,然后spfa判断是否有负环, 如果存在负环说明当前值太大了,原创 2016-08-09 23:01:24 · 281 阅读 · 0 评论 -
UVALive - 4618 Wormholes(负环)
自己用SPFA做,T了。刚开始还不相信,N<=50,(井底之蛙的集中体现).看了大牛博客看了很久,我做题思路基本上是剽窃的。 大牛博客链接 http://blog.csdn.net/L123012013048/article/details/47820453 这道题主要是要处理负环,但这个负环很特殊,跑着跑着负环就没了。 eg. 本来的负环的某个虫洞的到达时间小于虫洞的生成时间,那么负环就消失原创 2016-08-09 20:00:46 · 311 阅读 · 0 评论 -
bzoj2753滑雪与时间胶囊(最小生成树)
题意: 景点数要尽可能多,并且在景点数最大的情况下代价最小。 景点数要尽可能大,就是从1能到的所有点都要被遍历(这些点就是要去的景点),dfs即可。 用kruscal算法来做,排序函数简单解释一下 如果两条边的出边的点一样高,代价w越小越优; 否则,出边的点要尽可能高。 因为我们要尽可能先走高的点,才能保证访问的点的个数越多,其次才是权值最小。 边其实是有向边,只能从高处到低处。/*kru原创 2016-08-03 13:50:46 · 274 阅读 · 0 评论 -
poj1236 - Network of Schools(强连通分量Garbow模板+缩点)
题意: 给出n个学校,每个学校都有receiving school,第一问求的是从外部分发给最少的学校,所有的学校都能收到,第二问就是加多少receiving school可以使得从任意学校发一个软件,其他全部学校都能收到。 思路: 求出强连通分量后,将每个强连通分量缩成一个点,得到一个DAG。接下来第一问的答案就是入度为0的点的个数,第二问是入度为0的点的个数与出度为0的个数两者的最大值。原创 2016-08-18 12:53:49 · 272 阅读 · 0 评论 -
poj2296 Map Labeler(2-sat+二分)
由于每个点要么在label的顶边或者在label的底边且在中间,并且有且只有一个在label上,所以就可以转化为2-sat问题。 建图如下: 不妨设 点yi<=yj。(i表示向下,!i表示向上) if(|xi-xj|>=d) continue; if(yj-yi>=2*d) continue; if(yj-ji>=d) i||!j else if(yj-ji>0) i&&!j e原创 2016-08-30 15:57:36 · 268 阅读 · 0 评论 -
poj3694Networks(边双连通分量+缩点+LCA)
首先求出所有边双连通分量,缩点后得到一棵树。之后每次加边就将边上两个点(新树的点)到他们lca路径上的桥去掉。 由于用边代表桥比较麻烦,所以在后面处理时是以边的终点标记桥。#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>原创 2016-08-20 17:34:32 · 250 阅读 · 0 评论 -
hdu4612warm up(双连通分量+缩点+最长链)
首先求出整个图的强连通分量,就各个强连通分量缩为一个点,得到一棵树。那么当天树 的节点减一就是当前桥的数量,而求的是加一条边之后桥的最小数量。也就是说加的这一条边的两个端点到他们lca的路径上经过的点要最多,其实就是求树上的最长链。 求最长链的算法 从任意一个点出发,找到离他最远的一个点u; 然后在从这个点u出发,找到离他最远的一个点v 则u-v就是最长链。#include <iostrea原创 2016-08-20 21:29:31 · 225 阅读 · 0 评论 -
uva1410题解Warfare And Logistics(LA4080)(最短路)
太渣,看了觉得可以做然后敲着敲着又觉得肯定超时。 看了大牛的博客才慢慢懂。 http://blog.csdn.net/nealgavin/article/details/9264185 这道题意不难理解,先求 n次最短路,计算最开始的和sum_ft。 然后删除每条边重新计算,但是如果没有没什么技巧来优化肯定是超时。 利用第一次求出来的结果并标记在求以i为源点时用到的边,这样接下来去除边的原创 2016-08-08 20:04:22 · 263 阅读 · 0 评论 -
hdu4725(The Shortest Path in Nya Graph)最短路
这道题数据范围比较大,如果暴力建图肯定T了,需要一点小技巧,本人太渣,看了大牛的博客才懂的。 kuang神 有两种思路思路1,拆点增加2n个点,也就是每层变成两个点。 n+2* i-1->n+2 *(i+1) ,路权为c;即指向上一层 n+2*(i+1)-1->n+2 * i ,路权为c;即指向下一层如果i属于u层, 则 i->n+2*u-1,路权为零,入层 n+2*u->i,路权为零原创 2016-08-08 15:15:46 · 293 阅读 · 0 评论 -
poj1062昂贵的聘礼(题解)最短路
这道题数据范围好隐蔽=。=其实是本人太渣 暴力枚举[k,k+m]。最多枚举不过百次。#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>#include <string.h>#include <queue>#defin原创 2016-08-07 19:01:07 · 277 阅读 · 0 评论 -
差分约束系统学习+例题(poj3159,poj3169,poj1201)
再次强调,转载请注明出处!!!差分约束系统差分约束系统是线性规划问题的一种。在一个差分约束系统中,线性规划矩阵A的每一行包含一个1和一个-1,A的所有其他元素都为0。因此AX<=B给出的差分约束条件是m个差分约束集合,其中包括n个未知元。每个约束条件为如下形式的简单线性不等式:xj-xi<=bk,其中1<=i,j,<=n;1<=k<=m。 通过观察不难发现:每个约束条件的不等式与求单源最短路径算法原创 2016-08-07 11:05:53 · 787 阅读 · 0 评论 -
hdu4370题解(0 or 1)
看完题意一脸茫然=。= 还是看神犇的博客懂的。 原文地址:http://www.cnblogs.com/kuangbin/archive/2012/08/17/2644557.html显然,题目给的是一个0/1规划模型。思维题,由一道让人不知如何下手的题,转换为了最短路解题的关键在于如何看出这个模型的本质。3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论:1.X12原创 2016-08-08 15:23:41 · 292 阅读 · 0 评论