图论
l04205613
闲人一个
展开
-
HDU4280 Island Transport(2012 ACM/ICPC Asia Regional Tianjin Online)
裸最大流,不过,可能是hdu的爆栈问题?或者是模板效率问题?貌似卡了不少同学,要不不应该这么惨的吧……当时dinic递归版交上发现是RE(stack over flow),于是LC果断认定是递归的问题,换了个非递归的dinic,7000ms+过掉。赛后pictureyong说 HDU 的栈本身就有问题,加个外挂试试(http://blog.csdn.net/hqd_acm/article/de原创 2012-09-09 23:52:32 · 3402 阅读 · 2 评论 -
POJ1724 ROADS(加限制条件的最短路,深搜)
图中每条路都有 路长 和 “过路费” 两个参数,现在只有 K 块钱,要你求起点到终点的最短路,也就是说在 K 花费内的最短路。这个题其实很多解的,只不过是题目描述用的模型是最短路的模型,其实方法多种多样。深搜解:每次找满足 花费 限制的点操作;总路长变长那么就回溯;递归出原创 2011-08-12 20:36:27 · 3312 阅读 · 0 评论 -
POJ1637 Sightseeing tour(混合欧拉图的判断)
给出一张混合图(有有向边,也有无向边),判断是否存在欧拉回路。首先是对图中的无向边随意定一个方向,然后统计每个点的入度(indeg)和出度(outdeg),如果(indeg - outdeg)是奇数的话,一定不存在欧拉回路;如果所有点的入度和出度之差都是偶数,那么就开始网原创 2011-08-12 11:51:28 · 2104 阅读 · 0 评论 -
HDU3622 Bomb Game(2-SAT 问题,The 35th ACM/ICPC Asia Regional Tianjin ,Online)
给出一些点对,你可以在每对中任意选一个,只能选一个,放置一个炸弹,每个炸弹爆炸时都有一个效果范围,会波及到其放置点为圆心,半径为 r 的圆的范围,问如果要让任意两个圆都不相交(可以相切)的话,半径的最大值是多少。很裸的 2-SAT 模型,每组点分为 A 和 A‘ ,然后2分枚原创 2011-08-10 09:07:43 · 1336 阅读 · 2 评论 -
2-SAT——7.0(poj3648 Wedding,完结篇)
纠结了这么久,终于把传说中的POJ六道 2-SAT 问题(2723,2749,3207,3648,3678,3683)加上 HDU 上面的两道(3062,3715)全部 A 完,真心纠结啊,建图真心恶心,有时候真的不知道那些边该加进去还是不该加进去,说句实话,我觉得 A 完这原创 2011-08-09 19:35:29 · 1278 阅读 · 3 评论 -
ZOJ2760 How Many Shortest Path(floyd+最大流)
给定有向图,每条边只能用一次,求给定两点间有几条最短路。看了看人家的文,有个很巧妙的方法,首先筛选出所有最短路,用这些在最短路上的边建图(每条边赋权值为一,保证只能使用一次),求一次给定点之间的最大流即可。我用的 floyd 求最短路,dinic求最大流:#inc原创 2011-09-07 11:25:40 · 1557 阅读 · 0 评论 -
POJ1273 Drainage Ditches(裸最大流,EK,DINIC)
注意重边。EK:#include#include #include#define min(a,b) a<b?a:b using namespace std; const int N = 201; const int INF = 1000000000;原创 2011-03-03 21:35:00 · 821 阅读 · 2 评论 -
2-SAT——5.0(poj3683 Priest John's Busiest Day)
poj3683 Priest John's Busiest Day题意:一个小镇里面只有一个牧师,现在有些新人要结婚,需要牧师分别去主持一个仪式,给出每对新人婚礼的开始时间 s 和结束时间 t ,还有他们俩的这个仪式需要的时间(每对新人需要的时间长短可能不同) d ,牧师可以原创 2011-08-08 19:33:54 · 2712 阅读 · 1 评论 -
2-SAT——3.0(poj3207)
poj3207 Ikki's Story IV - Panda's Trick这个题卡的是建图,我开始一直没想到怎么建图,后来看了报告才明白的,= =!题意是说给出一个圆上的 n 个点(0~n-1编号),然后在指定的 m 对点之间各连一条线(可以在圆内,也可以在圆外,可以原创 2011-08-08 10:40:49 · 2846 阅读 · 3 评论 -
2-SAT——6.0(poj2749 Building roads)
poj2749 Building roads题意是说有 N 个牛栏,现在通过一条通道(s1,s2)把他们连起来,他们之间有一些约束关系,一些牛栏不能连在同一个点,一些牛栏必须连在同一个点,现在问有没有可能把他们都连好,而且满足所有的约束关系,如果可以,输出两个牛栏之间距离最大原创 2011-08-09 12:04:05 · 2267 阅读 · 1 评论 -
2-SAT——4.0(poj2723 Get Luffy Out)
题意:给出 n 对钥匙,每对只能挑一把使用,每把只能用一次,当一对钥匙中的一把被使用后,另一把也就不能再用了;然后给出 m 道门,每个门都有两把钥匙可以打开,问最多能开几道门(按给出的顺序开)。矛盾关系:1:n 对钥匙中,A 和 B 只能选择一把,用点 A 表示选择钥匙原创 2011-08-08 19:06:28 · 1579 阅读 · 3 评论 -
2-SAT——1.0(hdu3062,poj3678)
2-SAT 问题是什么意思,如何求解,大家可以参考 伍昱 的《由对称性解2-SAT问 题》,以及 赵爽 的《2-SAT 解法浅析》两篇论文,很详细,很给力。hdu3062 Party,裸2-SAT模型,图基本上给好了,判断一下就好。用 tarjan 算法求强连通,然后判断原创 2011-08-07 20:46:35 · 1964 阅读 · 0 评论 -
2-SAT——2.0(hdu3715 Go Deeper,The 2010 ACM-ICPC Asia Chengdu Regional Contest)
也是很裸的模型,不过由于解未知,要求找到最大的可行解,所以需要在解的可行区间里面二分查找答案,直到找到最大的可行解。if dep 我们在 0 到 m 上查找最大可行解时,要想让 dep 值尽量大,就要尽量满足不等式(x[ a[ dep ] ] + x[ b[ dep ]原创 2011-08-07 21:02:45 · 1589 阅读 · 0 评论 -
POJ1639 Picnic Planning(度限制生成树)
黑书上的例题,所以题意就不啰嗦了,具体模型是求一个无向图的最小生成树,其中有一个点的度有限制(假设为 k)。要求最小 k 度生成树,我们可以按照下面的步骤来做:设有度限制的点为 V0 ,V0称为根节点1,把所有与 V0 相连的边删去,图会分成多个子图(假设为原创 2011-08-14 20:18:36 · 1158 阅读 · 0 评论 -
sgu326 Perspective(最大流)
已知同一赛区的 N 只球队,现在知道他们现有得分,还有剩下的比赛场数(包括本赛区内的,和跨赛区的),以及赛区内部的对阵表,问 1 号球队能否获得赛区冠军(可以并列)。大神的建图,我复述一遍,加深理解:首先我们贪心选择 1 号球队剩下的比赛全部获胜,剩下的球队跨赛区的比赛全原创 2011-09-13 20:24:10 · 827 阅读 · 0 评论 -
POJ3308 Paratroopers(最大流)
给出一个矩阵,要求以最低花费覆盖掉矩阵中的所有点,覆盖规则是,可以一次选择一整行覆盖,或者一整列覆盖,(覆盖每行,每列都对应的有不同的花费),最终的花费是这些行和列花费的乘积。建图:这里因为要求的是乘积,不是加和,所以需要用log( a )+log( b ) = log(原创 2011-09-13 21:54:38 · 1864 阅读 · 0 评论 -
hdu 1856 More is better(并查集基础)
water~~~~简单的并查集,查出有几个集合即可#include#define max(a,b) a>b?a:b#define min(a,b) a<b?a:bint father[10000001],vis[10000001],root[10000001];void init(){ for(int i=1;i<=10000000;father[i]=i,vis[i++]=0)原创 2011-02-15 17:14:00 · 661 阅读 · 3 评论 -
hdu 1272小希的迷宫(并查集判断无向图回路)
并查集~~~判断图是否连通且无回路待连接的两点如果祖先节点相同,那么就构成回路#include#define max(a,b) a>b?a:b#define min(a,b) a<b?a:bint father[100001],vis[100001],ans;int findfather(int a){ if(father[a]!=a) father[a]=findfat原创 2011-02-15 11:13:00 · 4053 阅读 · 4 评论 -
HDU1569 方格取数(2)(最大点权独立集 + 最小点权覆盖集 = 总权和)
给出一个 N * M 的矩阵,每个格放着一个非负数,要求选出一些数,使他们的和最大,要求是有相邻边的格子里的数不能同时选。先说,我压根没想过这事网络流……因为方格取数(1)是个状态压缩……看了题解,才明白的:这个题由于数据范围较大,所以状态压缩过不去,需要用网络流,我原创 2011-09-28 15:21:21 · 2146 阅读 · 0 评论 -
神棍节献礼之——TJU1111 MPI Maelstrom(最短路)
我用的floyd,很水,直接整。天大OJ的这个神棍题很有爱……原题链接:http://acm.tju.edu.cn/toj/showp1111.html代码:#include#include#include#define N 101#define原创 2011-10-11 10:05:05 · 1377 阅读 · 0 评论 -
POJ1470/ZOJ1141 Closest Common Ancestors(LCA离线算法)
题意很明显?真不觉的,我去啊,我是看了人家的翻译才明白的,那家伙,输入格式相当销魂啊……大意是说,给出一棵树(包含 N 个点),然后给出 M 次询问,每次询问都是两个点的编号,他们一定有一个最近公共祖先,最后让你输出每个点被当做最近公共祖先的次数(是 0 次的话就不输出了)。原创 2011-09-27 18:03:17 · 3709 阅读 · 3 评论 -
最小路径覆盖,最小点覆盖,最大独立点集
node 1:最小路径覆盖在一个PXP的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么原创 2011-03-25 17:24:00 · 10781 阅读 · 1 评论 -
HDU2586 How far away ?(LCA离线算法)
LCA(最近公共祖先)的离线算法,用到的是 tarjan 的思想,并用并查集标记父亲节点。说说我的理解:我们从根开始深搜遍历树,每当回溯到一个节点时,那就意味着我们已经完成了该节点子树的遍历,显然这个节点就是子树中点以及其本身的最近公共祖先,以此类推到整个树。这里非常巧妙原创 2011-08-17 20:16:25 · 2054 阅读 · 0 评论 -
POJ2060 Taxi Cab Scheme(最小路径覆盖)
题意:有 n 个乘客需要乘出租车出行,给出他们出发时间,出发地点,目的地(input 保证数据按照出发时间升序给出),问最少需要安排多少辆车才能满足他们的需求。思路:我们把每个乘客的旅程看成一个点,那么如果去搭载第 i 个人的车在把第 i 个人送到目的地后,立即启程去第 j原创 2011-09-25 12:27:35 · 1479 阅读 · 0 评论 -
POJ2455 Secret Milking Machine(二分上线构图求最大流)
一张无向图中有 N 个点,M 条边,每条边都有一个权值,且每条边只能用一次,要求找出 T 条从 1 到 N 的路径,使这 T 条路径所经过的边中,权值的最大值最小。思想:二分边权值上线,多次构图求最大流,判断max_flow是否满足 T 。详见代码:#includ原创 2011-09-21 11:01:31 · 1535 阅读 · 0 评论 -
POJ1734 Sightseeing trip(最小环)
给出一张无向图,求一个最小环并输出路径。说说我的感觉:包含点 i 和点 j 的最小环,我们可以看成是 i 到 j 之间的最短路和次短路的组合,通过 floyd 可求任意两点之间的最短距离,那么我们只要找到最短路径外的一条最短路来保证 i 和 j 之间可达即可。在做 flo原创 2011-08-17 09:37:19 · 1924 阅读 · 0 评论 -
POJ2762 Going from u to v or from v to u?(强连通分量缩点+拓扑排序)
题意是给出一些点,和他们之间的有向边,如果图中任意两点 x,y 之间满足 x 可以到达 y 或者 y 可以到达 x ,就输出“Yes”,否则输出“No”,注意,这里是 x 到达 y ,或者 y 到达 x ,是 或者 不是 而且 !!!如果是“而且”的话,很明显的是判断整个图是原创 2011-08-01 18:03:16 · 4041 阅读 · 0 评论 -
POJ2914 Minimum Cut(无向图的最小割,Stoer_Wagner算法)
Stoer_Wagner算法解决无向图的最小割问题,其思想是:最小割可以把一张联通图分成两部分,对于图中任意两点,要么同时属于这两部分中的一部分,要么分别在这个两个集合中,我们枚举任意两点间的最小割,假如两点属于同一个集合,那么合并他们,因为不影响最终结果,然后继续,并一直更新原创 2011-08-16 09:14:57 · 2384 阅读 · 0 评论 -
差分约束小结(poj1201,poj1716,poj1364,poj3159,poj3169,poj1275)
总体感觉,难点是建图,因为建图的时候需要考虑一些题目上没有明确给出的隐含条件,只有把所有约束关系找全之后,然后再正确运用最短路(或者最长路)的性质求解,才能得到正确答案。说说我的收获:node1:对于区间放置元素问题,要注意区间开闭性,也就是说要关注对点的约束。特别注意每原创 2011-08-04 20:33:14 · 2301 阅读 · 3 评论 -
POJ1364/ZOJ1260 King(差分约束,spfa)
差分的题,建图还是挺纠结的,虽然这个题没有卡建图,所有不等式都给你了,没有隐含条件,只是注意把 )转化成 = )就可以了,但是还是逗留在套模板的那个层面,没有深刻理解其中的理论意义,以后还要继续努力。代码:#include#include#includeusing原创 2011-08-03 10:28:48 · 1234 阅读 · 2 评论 -
POJ1904/ZOJ2470 King's Quest(tarjan判强连通分量)
POJ上面这个题的时限是15000ms,看着都DT,最起码挺吓人的……题意是,N个男生和N个女生,告诉你每个男生喜欢的女生编号,然后给出一个初始匹配(这个初始匹配是完备匹配),然后求所有可能的完备匹配,按升序输出。当然,如果暴整的话(当然我没试过),2000个男生+2000个原创 2011-08-02 19:05:42 · 2323 阅读 · 0 评论 -
POJ3281 Dining(网络流)
<br />建图是注意牛要拆点,因为牛点上有流量限制(每头牛只能选一份套餐),把牛拆点并将边权赋值为1<br />剩下的就是裸最大流了,EK就可以过,不过有点慢,下面是一组数据,在POJ的discuss里面看到的,就是这组数据救了俺,感激下……<br /> <br />数据:http://poj.org/showmessage?message_id=124547<br /> <br />代码:<br />//源点-->food-->牛(左)-->牛(右)-->drink-->汇点//精髓就在这里,牛拆点原创 2011-03-31 14:39:00 · 1981 阅读 · 0 评论 -
ZOJ 1157 A Plug for UNIX (POJ 1087)
恶心的建图,好恶心……关于这题,关键在建图,建完图,最大流,还是二分匹配,各种随意啊……我就不贴自己丑陋的代码了,给两个给力的blog(I think)二分匹配解:http://blog.csdn.net/zxy_snow/archive/2011/02/27/6211409.aspx网络流解:http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html所以我觉得图论这块,会建图的才叫真正会了,像咱这等小菜,虽然A题不少,各种定理啦,证明啦也原创 2011-03-30 21:15:00 · 1074 阅读 · 0 评论 -
POJ 1161 Walls
<br />很好的建图题,有点繁琐,但是挺有意思的,我想了好久,中间有不少想法,敲出来一个,发现是错的,从头再敲,然后再敲出来一个,发现还不对,discuss里面有人说 BFS 神马的,我没往那方面想,一直用 floyd 加上枚举建图,最后终于A掉了……<br /> <br />YM我自己一下……<br />(笑吧,不过别让我知道……)<br /> <br />题意是说有 n 个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了最外面的一个原创 2011-05-17 16:52:00 · 1164 阅读 · 2 评论 -
ZOJ 2016 Play on Words (HDU 1116)(欧拉回路,欧拉通路)
<br />我去啊,这就是欧拉路啊,并查集时没注意看,还以为很复杂呢……<br />媛神的总结,言简意赅,一点都不用改:<br /> <br /> <br />欧拉回路,所有点连通,并且所有点的入度等于出度。 <br />欧拉通路。从原点S出发,经过所有点,从终点t出去。 <br />所有点除起点终点外的度都是偶数,且出度等于入度<br />起点的出度比入度大1 <br />终点的入度比出度大1 <br /> <br /> <br />#include<stdio.h>#include<string.h原创 2011-03-25 16:33:00 · 1584 阅读 · 0 评论 -
zoj 1137 Girls and Boys(poj 1466)(最大独立点集)
最大独立顶点集在一个二分图中,选择一些顶点,使得所有选择的顶点集合中没有任意两个顶点之间有边相连方法:二分图匹配,可以证明,最大独立顶点集的数目就是总顶点数减去最大匹配数(也就是每个匹配有一个边扔掉)(摘自:http://my.opera.com/IloveLunamaria/blog/show.dml/810972)就是说:极小覆盖集和极大独立集互补这题题我一直没看懂,所以一直纳闷为啥是 n-cnt/2 ,后来看懂题了,才知道原来这题的二部图两边集合的点都一样,所以相当于最大匹配求了两次,所以要减去原创 2011-03-20 01:06:00 · 1629 阅读 · 0 评论 -
ZOJ 1654 Place the Robots(最大二分匹配)
<br /> <br />这道题题意和ZOJ 1002 Fire Net 一样,只不过是数据规模较大(50*50,而1002只有4*4),所以1002可以直接暴搜解决问题,这个用搜索肯定不行。思路是转化成二分图,求最大匹配。<br /> <br />每个 'o' 点可以放置机器人,如果一个点放置一个机器人后,它能影响到的范围(上下左右四个方向,遇到边界,或者 '#' 截止)内就不能再放机器人,所以以能放置机器人的区域的横坐标为 x 集合,以纵坐标为 y 集合构图,求最大二分匹配即可<br /> <br />原创 2011-03-19 12:41:00 · 1297 阅读 · 3 评论 -
ZOJ 1364 Machine Schedule (POJ 1325) (最小点覆盖数==最大匹配数)
基础题,但是这个证明值得膜拜,orz个先……求二分图的最小覆盖数用最少的点将所有的边覆盖,这个覆盖数等于最大匹配数M;下面是LRJ的证明,很好很强大:①M个是足够的,只需要让他们覆盖最大的匹配的M条边,则其他边一定被覆盖(如果有边e不被覆盖,把e加入后得到一个更大的匹配)②M个是必需的,仅考虑形成最大匹配的M条边,由于两两无公共点,因此至少需要M个点才能把它们覆盖;(摘自:http://hi.baidu.com/rain_bow_joy/blog/item/51ced908dcb733a52eddd4cb.原创 2011-03-19 12:13:00 · 1890 阅读 · 1 评论 -
hdu 1385(zoj 1456)Minimum Transport Cost(最短路,输出路径,Floyd实现)
图论的最短路问题,这道题多了个每个点的权值(就是tax值,相当于过路费),还有要求输出最短路径,如果路长相等,以字典序为准。我用的是Floyd(因为……dijkstra我还不会路径回溯……)。另设一个和map[][]等大的数组path[][]用来保存路径,首先把path[i][j]初始化为j,也就是说path[i][j]用来保存 i --> j 的最短路径中 i 的最优后驱(即最近),在Floyd三重循环时,一直更新path。到结束时,以 i 找到 j 就可以了(这里有点递归的意思,以后好好想想)。上代码:原创 2011-02-22 12:43:00 · 1826 阅读 · 1 评论 -
POJ 1698Alice's Chance(二分匹配解)
<br />构图啊,万恶的构图,下次要注意……<br />这题用最大流过了,觉得匹配也可以,就是把需要多次匹配的点集的每个点按其允许匹配次数拆分,拆完就成最基本的二分匹配了<br /> <br />#include<iostream>#define N 1001using namespace std;int n,day,sum,map[N][600],vis[N],match[N];void getmap(){ int i,j,k,p,begin; scanf("%d",&n);原创 2011-03-13 22:47:00 · 606 阅读 · 0 评论