图论
文章平均质量分 77
yang_bro
For my dreams I hold my life ,for wishes I behold my night. ---Nightwish
展开
-
UVALive 2197 Paint the Roads(费用流)
n个点m条边的带权有向图,现在要将某些边涂上颜色,使得每个点恰好在k个有颜色的环上。每个点都在k各环中,说明每个点的 入度=出度=k。 用费用流搞,增加源汇点s ,t,将每个点拆成两个点,u跟u+n,一个代表出度,一个代表入度。从s向每个u连的边,从每个u+n向t连的边,分别代表入度跟出度的上限。 然后对于原图中的有向边, 从u向v+n连一条的边。这样求s->t的最小费用最大流。如果能漫流,答原创 2013-11-14 11:11:30 · 1435 阅读 · 0 评论 -
hdu 3926 hand in hand(简化版图的同构)
题意就是判断两个图是否同构,标准的判断图的同构是很难的,不过这个题却是例外。每个kid都只有两只手,也就是说每个点的度最大为2,这个是解题的关键!每个点的度最大为2,也就是说图上只存在三种形态:独立的点,链跟环。这样问题就简单了,分别找出两个图中的点,链跟环,分别比较时否完全相同即可。#include#include#include#include#include#inc原创 2013-09-25 09:52:01 · 1391 阅读 · 0 评论 -
hdu 3722 Card Game (km)
感觉题中这句“Jimmy wants to stick them into several circles, and each card belongs to one circle exactly.”就是吓唬人的,事实上任意两个字符串都能形成环(并不需要一定有公共前缀, 若没有,score为0)。那这样就成了一个裸的KM了。。。#include#include#include#inc原创 2013-10-10 13:00:28 · 1081 阅读 · 0 评论 -
hdu 4750 Count The Pairs (2013南京网络赛)
n个点m条无向边的图,对于q个询问,每次查询点对间最小瓶颈路 >=f 的点对有多少。最小瓶颈路显然在kruskal求得的MST上。而输入保证所有边权唯一,也就是说MST肯定唯一了。拿到这题第一反映是用次小生成树的prim算法在求MST的同时求出每对点对的瓶颈路。几乎就是一个模板题,无奈却MLE。。。于是换算法,用kruskal求MST,然后对于MST,离线LCA求出所有点对的瓶颈路。同原创 2013-09-21 23:05:54 · 1180 阅读 · 0 评论 -
hdu 4115 Eliminate the Conflict (3-sat ??? no! it's a 2-sat pro.)
坑爹:看到各种冲突,当然第一反映是2-sat,但是这有三种情况啊,貌似不能满足布尔型约束吧。。。gg吧, 没法做。。。反思:传统2-sat是,i拆为两个节点,为真对应i节点,为假对应i+n节点。这个题有三种不同的bool变量可以将每个点拆成6个点。石头:i*6+0 | i*6+1;剪刀:i*6+2 | i*6+3;布: i*6+4 | i*6+5.这样就能轻松解决各种约原创 2013-10-02 13:36:45 · 1108 阅读 · 0 评论 -
hdu 4738 Caocao's Bridges(2013杭州网络赛丶神坑)
就是求最小权值的桥。。不过有好几个坑。。。1:原图不连通,ans=0.2: m3: 最小桥边权为0的时候,ans=1,至少要派一个人运炸弹。。。#include#include#include#include#include#include#include#include#include#include#include#include#include原创 2013-09-15 19:32:36 · 1552 阅读 · 1 评论 -
hdu 4034 Graph(逆向floyd)
floyd的松弛部分是 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);也就是说,g[i][j] j, i->k, k->j的边)。那么这个题很明显要逆向思考floyd算法。对于新图i,j,k,如果g[i][j] > g[i][k] + g[k][j],那么肯定是不合理的。而如果g[i][j] = g[i][k] + g[k][j],明显i->j的边可以原创 2013-09-13 15:15:22 · 1048 阅读 · 0 评论 -
hdu 4406 GPA(费用流)
这题一看很明显就是网络流模型。每天是一个节点,向T连流量为K,费用为0的弧。每个课程向可上该课程的天数节点连流量为K,费用为0的弧。由于要保证每科都及格,显然是从S向初始分数低于60的科目连容量为60-score的弧,费用呢?显然是 -INF,这样就能保证有流量的话就优先及格。那么这个题就只剩下一个问题了:每科都得到60分以上之后呢?我们必须保证对于一个课程,得到x分之后再来上这节课只能是得x原创 2013-09-05 19:24:16 · 1168 阅读 · 0 评论 -
hdu 4685 Prince and Princess(二分匹配+强连通)
这题最开始我是输入n跟m,然后就加入虚拟节点是二分图左右两边节点数一样。。。wa了几发后才知道,加入虚拟节点是根据原图的二分匹配结果M决定的,左边还有x-M个没匹配,右边还有y-M个没匹配,所以这是应加入虚拟节点,使两边节点数为x+y-M,这样才能保证那些原先没有匹配到的王子跟公主也在连通图中。比如两个王子,一个公主,这样的正解应该是两个王子都能娶该公主的。加入的新王子,每个公主都喜欢;加入的新公原创 2013-09-12 10:34:01 · 1795 阅读 · 0 评论 -
POJ 1724 ROADS(bfs最短路)
n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路。直接优先队列bfs暴力搞就行了,100*10000个状态而已。节点扩充的时候,dp[i][j]表示到达第i点花费为j时的最短路。没加优化16ms过,不知道discuss里面说bfs超时是怎么回事。。。。#include#include#include#include#include#include原创 2013-09-03 19:38:16 · 1040 阅读 · 0 评论 -
sgu 286. Ancient decoration(最小环覆盖)
给你一个n个点,每个点度为k(k为偶数)的无向图,问是否能将图中的n条边染色,使得每个点都拥有两条被染色的边。也就是说,是否存在拥有原图中n条边的子图,使得每个点的度为2?仔细想想,每个点的度为2,实际上就是求原图的最小环覆盖了。求最小环覆盖的方法就是先求出原图的有向欧拉回路(k为偶数,欧拉回路必然存在),然后问题就转化成了是否能选择欧拉回路中的n条边,使得所有点都被覆盖?这不就转化成了DAG原创 2013-08-30 16:04:19 · 1435 阅读 · 0 评论 -
hdu 4598 Difference(奇圈判定+差分约束)
这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的。。。题意要求(1) |ai| i, vj) in E |ai - aj| >= T。由于(1)条件的存在,所以(2)条件能成立当且仅当ai和aj一正一负。由此可见,图中某条路上的元素正负值分别为正->负->正->负。。。显然当图中存在奇环的时候是无解的。判断奇环用二分染色,color[i]=0表示假设i节点未被原创 2013-08-29 14:52:25 · 1471 阅读 · 2 评论 -
SPOJ AMR12A The Black Riders(二分+二分匹配)
有n个人,m个洞。每个洞能容纳一个人,每个人到每个洞需要花费一些时间。每个人到达一个洞后可以花C的时间来挖洞,这样该洞的容量就变成2了。求能使至少K个人进洞的最短时间。还是将求极值问题转化为判定问题。二分枚举时间,能否在time的时间内让至少K个人进洞?求进洞人数当然用二分匹配做。g[i][j]为第i个人到第j个洞的时间。如果g[i][j] #include#include#inc原创 2013-10-16 17:57:32 · 1100 阅读 · 0 评论 -
URAL 1980 Road to Investor(二分+最短路)
n个点m条边的无向图,每条路有固定的长度,然后有一个速度上限。要求在T时间内能从1到达n,最少超速多少?显然是二分答案然后求最短路。不过当二分枚举的超速很大而某条边的距离很小的时候,经过这条边的时间是会很小很小的,所以要将所有的时间单位扩大1e9倍,才不会丢失精度。。。#include#include#include#include#include#include#incl原创 2013-10-19 20:05:22 · 1196 阅读 · 0 评论 -
UVA 12655 Trucks(MST + LCA)
n个点m条边的带权无向图,S个询问,每次询问L->H的所有路径中,最小边最大的那条路径的最小边。只要能发现,最优路径必然是kruskal求得的最大生成树上就一切都好办了。求出MST,然后在线LCA搞就行了。#include#include#include#include#include#include#include#include#include#include#de原创 2013-11-13 20:52:19 · 1530 阅读 · 0 评论 -
UVA 11613 Acme Corporation(不固定流量的最小费用流)
题意好长。。。。变量好多。。。。增加源点跟汇点。然后将每个月份看成一个点,然后拆成两个点u 跟 u+n。 从s向每个u连一条的弧,表示最多生产量及价值。从每个u+n向t连一条的弧,表示最多销量及价值。对于存放的情况 for(int j=0; j的弧,表示存放所要花费的价值。这题并不需要满足销量最大,也就是不固定流量的最小费用流,也就是说当s-t增广长度大于0的时候停止增广就行了原创 2013-11-13 23:02:34 · 2092 阅读 · 0 评论 -
URAL 1721 Two Sides of the Same Coin(二分匹配)
只看最后两段就行了。。题意就是,有些会statement,有些人会testdata,有些人两种都会。然后每个人有一个rank值,rank值相差2的两个人可以合作,求最大匹配。注意rank值相差2的人可以相互合作,也就是说,我们要把图分成二分图,使得能跟左边任意一个节点配对的点一定在右边。这样只需将rank % 4 = 2的人放在右边节点就行了。#include#include#原创 2013-11-26 21:33:41 · 1253 阅读 · 0 评论 -
hdu 4494 Teamwork(费用流)
最开始我是想的,把每个点拆成m个点,然后用一次费用流搞,对于那些可以重复利用的工人,添加一些cost为-1的弧。很逼真把,Why wa。。。其实每个兵种是相互独立的,那么就可以对于每个兵种,分别搞一次费用流,最后累加ans。这样代码就好撸很多了呢。。。费用流建图:显然每个点要拆成两个点,一个入(从s向其连的弧,简称x点),一个出(从该点向t连的弧,简称y点)。那么对于i,j两个点,如果en原创 2013-11-12 17:04:56 · 1603 阅读 · 0 评论 -
zoj 3732 Graph Reconstruction(构造)
预备知识:Havel-Hakimi定理先跑一遍Havel_Hakimi算法判断是否有解。对于判断多解的情况,再跑一遍Havel_Hakimi,如果sort(p+i, p+n)排序后,从i分别向i+1, i+2...i+p[i].d连边时,如果i+p[i].d跟i+p[i].d+1的剩余度数相同,那么交换这两个点在剩下的图中的位置,就能得到两个不同的图了。坑:当边数为零的时候,也要输出两原创 2013-11-25 14:55:26 · 1579 阅读 · 0 评论 -
UVA 12664 Interesting Calculator(spfa)
要你将x变换成y,一共有3×9中变换方法,每种变换有其对应的花费,然后求x-->y的最小花费,当最小花费不唯一时,求最小变换次数的解。类似于双调路径的题,用spfa进行状态转移就行了。不过类似于 ×1, +0这种变换是没有意义的,不用加入队列中了。#include#include#include#include#include#include#define REP(i, n原创 2013-11-07 18:57:01 · 1292 阅读 · 0 评论 -
UVA 12661 Funny Car Racing(最短路)
n个点m条边的有向图,求s->t 的最短路。其中每条边不仅有一个边权,还有对应的一个a, b值。从你出发开始,该边将开放a的时间,然后关闭b的时间,然后开。。关。。。几乎就是裸的最短路了,就是松弛的时候有两种松弛方法,一种是走到点u的时候,能直接走到v;另一种是时间不够,需要等“一段”时间,然后再走到v。#include#include#include#include#incl原创 2013-11-07 18:39:35 · 1802 阅读 · 0 评论 -
hdu 4784 Dinner Coming Soon(优先队列+spfa)
看完题目的开头,大概是个二维spfa,产生了此题可搞的幻觉。。。接着就看到了这句“But the matter is not so simple.”,次奥,看来是个三维的呢。。。接着就看到了这句“However, the problem is more complicated than imagine. ”,尼玛四维。。。好吧,四维spfa本质还是spfa吧。。于是就出现了在hdu各种原创 2013-11-18 19:19:09 · 1640 阅读 · 0 评论 -
hdu 4781 Assignment For Princess(构造法)
构造一个n个点,m条有向边的图,需要满足两个要求:1.任意一对点对之间最多有一条有向边,且没有自环。2.保证图联通,m条边的边权严格属于[1, m]且互不相同,从任意点出发,经过任意路径后回到起始点,经过的边权总和是3的倍数。其中第二个要求似乎听上去很玄乎,其实可以一步一步的来:要同时满足1.2的要求,而且输入数据 m >= n + 3,那么也就是说,我们总是能轻松的先构造一个n个点n原创 2013-11-17 10:18:49 · 4110 阅读 · 4 评论 -
Codeforces 362E Petya and Pipes (费用流)
n个点的网络,可以增加某些弧的容量,最大增加量为K,求增加后的最大流。要求增大K容量后的最大流,那如果把增加的流量加上费用呢?那题目也就是说,当费用为K的时候,最大流是多少。。。。把每条边拆成两条边跟,然后求s-t费用流,在费用等于K的时候终止费用流就行了。#include#include#include#include#include#define REP(i, n) fo原创 2013-11-15 15:36:39 · 1804 阅读 · 0 评论 -
ZOJ 2318 Get Out!(计算几何+spfa好题!)
你是一个圆,然后平面还有n个圆,问你能否通过移动自己,突出重围!再抽象一点,就是判断一个圆,是否在其他若干个彼此相连的圆的“大圈圈”内。。。这里不得不强烈推荐watashi大神的神思路。。。神奇地将此题转化成图论模型!个人的理解是,如果某两个圆相交或相切,那么他们组成的封闭区间可以用连接其两圆心的线段表示,这样能得到若干线段,这样就成了,若干线段中,是否能组成一个多边形,使得起始圆心在多边原创 2013-10-31 21:29:00 · 1551 阅读 · 0 评论 -
UVA 10806 Dijkstra, Dijkstra.(费用流)
n个点的无向带权图,求1->n的最短往返路径,不走重复边。这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流。而求1->n最短往返路径呢?增加源点s,由s到1加弧,容量为2(往返两次),费用为0;而对于原图中的边,分别由u到v,由v到u增加容量为1(往返不能走重边),费用为边权的弧。然后跑费用流得到的最小费用便是答案。如果最后求得的最大流小于2,则说明无解。#includ原创 2013-08-18 15:16:50 · 878 阅读 · 0 评论 -
UVA 10779 Collectors Problem(最大流)
这个题是很难往网络流上面构思的。。。从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数)。这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数。那么交换后的最大数呢?对于Bob以外的小伙伴,如果i拥有j物品超过1个(交换后他自己至少保留一个),从人节点i向物品节点j增加容量为num-1的弧,表示他能输出多少物品,而如果i没有j物品,那么从物品节点j原创 2013-08-18 14:29:14 · 1379 阅读 · 0 评论 -
POJ 2367 Genealogical tree
很耿直的拓扑排序题,就当熟悉一下算法吧。。。#include#include#include#include#include#include#include#include#include#include#include#define FF(i, a, b) for(int i=a; i<b; i++)#define FD(i, a, b) for(int i=a; i原创 2013-07-18 21:55:13 · 1142 阅读 · 0 评论 -
UESTC 1511 糖果 (差分约束系统)
题意还是比较耿直的,给你n个点,m组不等式关系,求满足条件的最小解显然是用差分约束系统来解。增加原点0,权值为0.题目要求每个小朋友都必须分到糖果,也就是d[i][0] = 1。但这个题却不能用传统的spfa来解。比如一下三个不等式:a>b b>c a>c;如果用最短路来解,假设d[a] = 1;那么松弛出来的d[c]必然会是1(a>c)。而根据题意(a>b b>c),显然b将出现无解的情原创 2013-07-18 17:07:53 · 1004 阅读 · 0 评论 -
hdu 3405 world islands
求删点后最小的生成树,n#include#include#include#include#include#include#include#include#include#include#include#include#include#define FF(i, a, b) for(i=a; i<b; i++)#define FD(i, a, b) for(i=a; i原创 2013-07-13 13:33:53 · 1192 阅读 · 0 评论 -
hdu 2196 Computer(树上最长路)
题意是给定一棵树,求以每个点为起点所能得到的最长路。。。校赛的时候moonlight出了一个不固定起始点的树上最长路,当时没想法,赛后A了,没想到今天这个还是卡了很久。。。求树上不固定起始点的最长路,两次dfs即可,第一次求到的最长路的终点必在最长路上,第二次dfs以其作为起始点就行。。。而这个题,求所有点为起点的最长路,任然需要两次dfs求出最长路及其两个端点,然后再来一次dfs,更新每个节原创 2013-06-03 20:31:23 · 1278 阅读 · 0 评论 -
POJ3921 && HDU 2485 Destroying the bus stations(最大流 or 费用流)
一道神奇的图论题,给出一个含n个点(n 我先用的费用流:建图:对每个点i拆点为i和i+n,令源点s=1,汇点t=2*n。增加弧(1, 1+n) ,(n, 2*n) 容量都为INF,费用都为0; 而对于非源汇点, 增加弧(i, i+n)容量为1, 费用为0。若原图中存在边(u, v),增加弧(u+n, v), 容量为1,费用为1(边权)。题目要求删点后点1到点n不存在距离大于k的路径,则对该网络原创 2013-05-14 21:08:56 · 872 阅读 · 0 评论 -
hdu 3666 THE MATRIX PROBLEM(差分约束系统)
感觉搞acm还是不能心急,昨天看了查分约束系统的论文后就迫不及待地做题,其实算法还没理解透。。。导致一下午的悲剧。。。回寝后冷静下来看了两小时书,今天做题明显感觉好多了。根据这个题意,不难得出 L (1) log(b[j]) - log(a[i]) (2) log(a[i] - log(b[j]) 这两个不等式,然后就是建图,spfa判负环,果断超时了一次。。。上网一查,如果用传统原创 2013-05-28 16:27:10 · 770 阅读 · 0 评论 -
ZOJ 1508 Intervals (差分约束系统+spfa)
通化邀请赛结束了。。。四题拿铜,还是太弱了。。。回来后连续两周的省赛和东北赛。。。最近准备搞搞图论和树形dp,最短路的差分约束系统应用一直没做,今天看了看国家队冯威的论文《树与图的完美结合--浅析差分约束系统》,感觉讲的挺详细的。。照着论文中的思路切了这道模板题。。。刚开始不知道如何输出结果,又再看了一遍论文,由于 s[i]数组保存0~i中数组元素集合的大小,所以从Max做spfa,答案便是-d[原创 2013-05-27 12:42:11 · 909 阅读 · 0 评论 -
ZOJ 3165 Party of 8g (最大点权独立集)
题意:有n个男生和m个女生,每个人有一个lovely value (即点权值),有s对关系(a, b),表示男生a和女生不能同时出现在party上。问可邀请人数的点权值和的最大值,和邀请的男女生编号。比较裸的二分图最大点权独立集,由于二分图最大点权独立集与最小点权覆盖集互补,所以仍用最大流来解:X集合为男生集合,Y集合为女生集合。建图与POJ2125一样(点击打开链接),设total为所有男女原创 2013-05-10 00:18:45 · 1171 阅读 · 0 评论 -
POJ 2125 Destroying The Graph (最小点权覆盖集)
基本概念:点覆盖集:(vertex covering set,VCS)是无向图的一个点集,使得该图中所有边都至少有一个端点在该集合内。形象地说是若干个点“覆盖”住了与它们邻接的边,这些边恰好组成了原边集。最小点权覆盖集:(minimum weight vertex covering set,MinWVCS)是在带点权无向图G中,点权之和最小的点覆盖集。题意:对一个有n个点,m条边的有向原创 2013-05-10 00:14:24 · 1026 阅读 · 0 评论 -
USACO 3.2 Sweet Butter
题意:给你n个点,c条无向边,以及p头牛所在的点编号,求所有牛同时走向一个点的总距离和的最小值,直接p次最短路就行。。。/*ID: yangdy03PROG: butterLANG: C++*/#include#include#include#include#include#include#includeusing namespace std;ofstream原创 2013-05-20 21:25:12 · 802 阅读 · 0 评论 -
hdu 1690 Bus System
dp思想吧,dp[i][j]表示i城市到j城市最小花费,状态转移方程挺简单的dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);刚开始还想着k必须在i和j之间什么的,一直wa。。。后面经人提醒,直接套floyd就行。。。#include#include#include#includeusing namespace std;#d原创 2013-05-20 20:18:09 · 634 阅读 · 0 评论 -
Southeastern European Regional Programming Contest 2010 D Problemsetting
又一次在比赛中碰到网络流,又一次没有搞出来,剁手啊!!!刚开始队友跟我说这题像是网络流,但我想了想,觉得最大流不能保证每个比赛节点都能满流,所以。。。。。赛后队友想到了二进制枚举选取的比赛,然后根据选取的比赛建二分图,左边节点为题目节点,而每次只需把当前枚举的比赛加到右边节点中!这样的话,只要所有右边节点能满流,就说明当前枚举策略可行!时间复杂度2^15*(max_flow()),好暴力。原创 2013-07-22 19:50:22 · 1398 阅读 · 0 评论 -
hdu 4607 Park Visit
求出树的直径d。当kd的时候,便是直径d的长度 加上 多出来的点数*2.#include#include#include#include#include#define FF(i, a ,b) for(int i=a; i<b; i++)#define FD(i, a ,b) for(int i=a; i>b; i--)#define REP(i, n) for(int i=0;原创 2013-07-25 10:06:29 · 813 阅读 · 0 评论