图论
文章平均质量分 84
nndxy
永不丧失对生活的热情,人生就是要不停地战斗!
展开
-
Codeforces Round #335 (Div. 2) D. Lazy Student
题意:有一个 n 个点、m 条边的无环无重边图,现在告诉你这m 条边的权值,并且指出了该图的最小生成树上的 n-1 条边(标号为1),现在要你还原整个图。当然有多组解,只要输出一种可行解就行,若不能还原则输出 -1。分析:我的想法是,指定最小生成树上的边都是与 点1 直接连接的边,即 1 与 2、3、4、……、n 相连;根据kruskal算法,首先对所有的边按照升序排序,对于标号为 1 的点,按照顺序构成与 1 相连的边,并且沿途存好新增的点,这里我用队列存;对于标号为 0 的边,它只可能由之前得到的除原创 2015-12-11 23:34:02 · 798 阅读 · 0 评论 -
HDU_4183_Pahom on Water(最大流)
题意:有N个点,给出每个点的频率、坐标与半径。两点相交即连通。起点是频率最小的那个点,终点是频率最大的那个点。题目要求先从起点到终点,再从终点回到起点。从起点到终点的过程中,只能从频率小的走到频率大的点(前提是两点相交),从终点到起点的过程中,只能从频率大的走到频率小的。在走的过程中,除了起点与终点,别的只要走过就会消失,就是说只能走一次。问可不可以从起点到终点又回到起点。分析:最大流。题目相当于从起点走到终点走两次,但是两次走的路径都不相同。就转化成了最大流模型了。建好图后,如果最大流大于等于2的话,原创 2015-09-12 22:46:31 · 534 阅读 · 0 评论 -
HDU_2883_kebab(最大流)
题意:有一个烧烤机,每次最多能烤 m 块肉,现在有 n 个人来买烤肉,每个人到达时间为 si,离开时间为 ei,烤肉数量为 ni,烤肉所需烘烤时间为 ti,每个人要烤的肉可以分成若干份在同时烤,问是否存在一种方案可以满足所有顾客的需求。分析:刚开始拿到这题,又傻乎乎地直接网络流去搞了。不用说TLE都没到就先MLE了。然后想了很久的如何建图。还是没想出来,网络流模型建图方面还是太弱了,太弱了。后来还是看了别人的才知道如何构建模型的。一定要加强网络流建模的锻炼。建图:把所有人到达的时间以及离开的时间存在原创 2015-09-13 23:05:55 · 435 阅读 · 0 评论 -
HDU_3572_Task Schedule(最大流)
题意:给出N个任务,M个机器,每天每台机器只能处理一件事,接下来N行,每行有p s e,分别表示这个任务要用p天,要在s~e天完成,问你这所有任务能不能完成。分析:最大流问题。建立最大流模型,然后判断最大流和完成这些任务需要的总时间是否相等。建图:加入超级源点s,s指向所有的任务,容量为pi;每个任务 i 指向它指点的时间段[Si,Ei]中的每一天,容量为1;加入超级汇点t,使得([S1,E1]) U ([S2,E2]) U …… ([Sn,En])中的每一天都指向t,容量为M,因为每一天都能够有M台机原创 2015-09-12 21:32:23 · 479 阅读 · 0 评论 -
HDU_3605_Escape(多重匹配 / 网络流)
题意:n个人要移民到m个星球,每个星球容量为a[i],告诉你每个人可以去的星球,问是否所有的人都能够移民成功。分析:二分图多重匹配问题。起初往网络流方向想,没想到怎么建图。然后就用二分图多重匹配模板过了。再后来就弱弱地搜网络流的题解了。才发现自己智商不够……二分图多重匹配:模板题,匈牙利算法稍微变形即可。match[i][j]代表 x 集合中的 i 点匹配了 y 集合中 j 个点(一对多)。网络流建图:此题人数达10的5次方,可想建立一般的网络流是不能过的。然而星球m却只有10,那么我们可以利用原创 2015-09-13 22:24:49 · 599 阅读 · 0 评论 -
HDU_3081_Marriage Match II(二分图完美匹配 / 网络流)
题意:如果女孩X与男孩Y不会争吵,那么Y可以做X的男朋友;如果女孩X与女孩Z是好朋友,Z与男孩W不会争吵,那么W也可以做X的女朋友。现在问,有多少种完全不同的完美匹配方案。(完全不同的意思是任意两个方案之间没有任何相同的匹配对)分析:本题有两种解法:二分图完美匹配,二分 + 网络流。然而我却只会用二分图完美匹配来做,而不会用网络流来解,蒟蒻还是要继续成长……二分图完美匹配:女孩之间有关系用并查集来实现。建好图后,找到一次完美匹配,然后把匹配的边全部删掉,ans++;直到找不到完美匹配为止。二分原创 2015-09-14 17:00:05 · 776 阅读 · 0 评论 -
HDU_3277_Marriage Match III(最大流)
题意:跟HDU 3081差不多,就是多了一个条件,每个女孩可以另外选K个不喜欢的男生。分析:既然题目就多了一个条件,那么建图的话自然和上一题差不多,【点击这里查看HDU 3081构图法】,只要把每个女生拆成两个女生girl_1,girl_2,若girl_1对boy_1不排斥,则连边gilr_1 -> boy_1,容量为1;若girl_1不喜欢boy_1,则连边girl_2 -> boy_1,容量为1,girl_1 -> girl_2,容量为K。然后二分找答案,最大流判可行度即可。原创 2015-09-14 23:00:14 · 730 阅读 · 0 评论 -
HDU_3468_Treasure Hunting([二分图匹配 / 最大流] + 最短路)
题意:在地图上从A -> B -> C …… -> Z -> a -> b …… -> z 这样走,每次走的都是最短路(可能多条路径),地图上有一些金子,如果在某一条最短路上存在金子,那么只取一个金子。问最多能取多少金子。分析:先bfs预处理出每个点(A.B.C……)到其他点的最短路径,然后对于每个金子,判断其是否在某条最短路径上,假设gold1在(A -> B)的最短路径上,那么A连向gold1,依次类推,就建立了二分图模型了,然后求二分图最大匹配即可。若用网络流,那么所有的边容量设为1;加入超级源点原创 2015-09-17 09:56:58 · 681 阅读 · 0 评论 -
HDU_3416_Marriage Match IV(最短路+最大流)
题意:有向图中,从起点A走到终点B,每条路只能一次,问最多能走多少次最短路。分析:最短路+最大流。先用最短路预处理出起点与终点到所有点的最短路,然后对于所有的边(u,v,d)判断一下是否在最短路径上(dis[s][u]+d+dis[t][v]==dis[u][t]),保留下这些有用边,容量都为1,然后跑一遍最大流即可。原创 2015-09-17 09:27:44 · 556 阅读 · 0 评论 -
HDU_4240_Route Redundancy(最大流dinic or EK)
题意:在给出的有向图中,求出最大流maxflow以及所有“可行流路径上的最小容量”的最大值maxmincap,先输出题目给出的D,再输出maxflow / maxmincap。分析:最大流问题。dinic or EK 均可解。就本题来讲个人倾向EK算法。原创 2015-09-13 00:09:56 · 607 阅读 · 0 评论 -
POJ_2112_Optimal Milking(最大流+二分)
题意:k个机器,每个机器最多服务m头牛。c头牛,每个牛需要1台机器来服务。告诉你牛与机器每个之间的直接距离。问:让所有的牛都被服务的情况下,使走的最远的牛的距离最短,求这个距离。分析:二分距离,然后最大流判可行性。先用floyd求出最短路,求的过程要注意,当u==v || (u,v)没有直接相连的路径时值为0,floyd的时候要先判断。然后每次二分的值mid,建图时,把机器和牛的最短路小于等于mid的边加进去,容量为1;加入超级源点s,使得s指向所有的机器,容量为M;加入超级汇点t,使得所有的牛指向t,原创 2015-09-11 18:01:11 · 867 阅读 · 0 评论 -
喵呜的虚拟城市(最短路)
分析:首先,最终的情形一定是这样,每个车站的容量一定为v(1)~v(n)中的一个,那么可以把一个车站分成n个点,然后根据v(x)>=v(y)连边构图。最后跑一遍最短路即可。 构图: 加入一个超级源点0,源点0与起点车站1所分成的n个点相连,那么车站1形成的点即为1~n,形成的边即为0->i,边的权值即为abs(v(1)-v(i))。依此类推,对于车站x->y,如果v(i) >= v(j),那么连边 (x-1)*n+i -> (y-1)*n+j,权值为abs(v(y)-v(j))。原创 2015-08-02 17:52:14 · 794 阅读 · 2 评论 -
GBX的Graph(最短路)
题意:给你一个n个点m条边的有向图,每一个点都有一个小写字母。现在ZZT站在点1,ZZ站在点n,ZZT想用最短的路程走到ZZ的地方。但是呢,ZZT不希望走过这样的连续的三点:cnm,tmd,nsb。现在问你他能否到达ZZ所在地。若能,输出最短路径,否则输出-1。原创 2015-08-19 12:59:44 · 698 阅读 · 0 评论 -
HDU_1533_Going Home(最小费用流模板)
题意:N*M的地图上有等数量的人和房子,每个房子只能容纳一个人,人可以上下左右移动,每移动一格需要花费1美元,问所有人和房子匹配好的最小费用是多少。分析:最小费用流。关键在于建图。假设有n个人,首先加入超级源点s(0)、超级汇点t(2*n+1),源点s指向所有的人,容量为1,费用为0;所有的房子指向汇点t,容量为1,费用为0;每一个人都指向所有的房子,容量为1,费用为曼哈顿距离(|x1-x2| + |y1-y2|)。接着就是跑最小费用流的模板了!原创 2015-09-11 00:21:08 · 645 阅读 · 0 评论 -
HDU_1532 && HDU_3549(最大流EK算法模板)
题意:从1开始到终点n,最多能通过多少的流量,就比如说1到2的流量是20,2到3的流量是10,那么到达终点3的流量为10,而1到2还能经过10的流量,2到3不能再通过。分析:完全是照刘汝佳的紫书模板写的,EdmondsKarp算法,简称EK算法。原创 2015-09-08 21:06:35 · 1079 阅读 · 0 评论 -
HDU_1507_Uncle Tom's Inherited Land*(二分图匹配+奇偶性)
题意:给你一个N*M的矩阵,里面有些点是不能用的,现在问你用1*2的方格最多能放多少,不能重叠,并且输出每对方格坐标。原创 2015-05-09 22:22:28 · 913 阅读 · 0 评论 -
POJ_3281_Dining(最大流dinic模板)
题意:有N头牛,F种食物,D种饮料。题目给出每头牛喜欢吃的食物与饮料。问给每头牛指定一种食物与一种饮料,最多能满足多少头牛?分析:一看感觉是二分图匹配问题,然而他是一头牛匹配两种物品,所以可以用网络流来做。关键在于建图,可以建立(s - 食物 - 牛 - 饮料 - t)这样的图,边权值为1。但是这样子还是会出错,一头牛可能匹配多种食物,我们可以把一头牛拆成两个点,那么构成图(s - 食物 - 牛 - 牛 - 饮料 - t),这样子每头牛就限定只能一种食物一种饮料了。然后就是使用最大流模板了。原创 2015-09-09 20:32:40 · 1039 阅读 · 0 评论 -
POJ_1698_Alice's Chance(最大流)
题意:爱丽丝要去拍一些电影,这些电影只能在指定的星期几拍摄,并且电影需要在指定的W个星期内拍完D次,问她能否拍完这些电影?分析:转化为最大流来做。这样子来建图:加入超级源点s连向需要拍的电影,容量为Di;每个电影都指向它能够开拍的那一天,容量为1;加入超级汇点t,让所有的日期指向t,容量为1。.然后判断最大流是否为拍电影需要天数的总和。原创 2015-09-11 16:17:29 · 508 阅读 · 0 评论 -
POJ_2135_Farm Tour(最小费用流)
题意:给你一副无向图,问从1->n->1这样走一个来回所用的最短路径是多少,每条边只能走一次。分析:最小费用流问题。把边的长度当成费用,每条边容量为1,由于是无向图,所以每条边要处理两次,即u->v,v->u都要加进去。把图建好后跑一遍流量为2的最小费用流得出最小费用即可。原创 2015-09-11 11:48:05 · 1359 阅读 · 0 评论 -
HDU_2448_Mining Station on the Sea(最短路 + 最小费用流)
题意:有m个油田、n条渔船以及n个港口,n条船分别停在n个油田上,给出油田与油田之间的距离,油田与港口之间的距离,现在你要把船开回到港口去,一个港口只能容纳一条船,问所有船行驶的总路程最少是多少。分析:最短路 + 最小费用流。构图:加入超级源点s(0),从s指向每条船 i 连一条边,容量为1,费用为0;加入超级汇点t(2 * n + 1),从每个港口 i + n 指向t连边,容量为1,费用为0;最短路求出每条船到每个港口的最短距离,从该条船向每个港口连边,容量为最短路径长度。最后跑一原创 2015-10-07 16:47:02 · 746 阅读 · 0 评论 -
HDU_3395_Special Fish(最大费用最大流)
题意:有n条鱼,每条鱼最多可攻击其他鱼一次,被别人攻击一次。题目给出一个n*n的矩阵,如果matrix[i][j] == 0,表示 i 不攻击 j;如果matrix[i][j] == 1,表示 i 可以攻击 j,并且费用为value[i] ^ value[j]。现在问在满足条件的前提下获得的最大费用。分析:最大费用最大流。首先应该想到的是,把每条鱼 i 拆成两个点,一个代表攻击(i),一个代表被攻击(i + n)。然后该题目求得应该是最大费用任意流,并非最大流。要转化成最小费用最大流来做,首先把费用变成原创 2015-10-07 17:23:35 · 539 阅读 · 0 评论 -
HDU_4123 && POJ_4003 Bob’s Race (dfs / bfs + RMQ + 尺取)
题意:一棵树上有 N 个节点、N - 1 条边,现在给每个询问一个Q,在节点区间 [ 1, N ] 内找出一个最大的区间,使得以里面节点为起点的最长路径的极差小于等于Q。分析:该题就是三个算法的结合。1)预处理出每个节点能到达的最长路径,这个由三次 dfs 或 bfs 即可得到(树上每个节点的最长路径求法:点击这里);2)用RMQ预处理出区间的最大值以及最小值;3)用尺取法求得最大区间。设定两个指针 s、t 分别指向数组头,然后开始往后扫,如果区间的max[s, t] - min[s, t] <=原创 2015-11-10 16:57:33 · 809 阅读 · 0 评论 -
ZOJ_3656_Bit Magic(2-SAT)
题意:给出一个calculate函数,再给出b数组,问a数组是否存在。分析:2-SAT问题。一开始,想到把每个a[i]转化成31位二进制,也就是相当于把每个a[i]拆成31个点,然后去建图。然而这样子却一直MLE。思路也就止于此。然后看了下别人的题解,发现思路是差不多的。但是他是跑31次2-SAT来判断,也就是对每个a[i]的每一位拿出来,判断31次如果都满足即可输出YES,否则输出NO。原创 2015-10-21 18:39:46 · 733 阅读 · 0 评论 -
CDOJ_1147 (最短路条数)
分析:最短路条数问题。求最短路的条数只需要在dijkstra上面加一个数组sumt[]记录就行,sumt[v] 表示从源点 s 出发到 v 的最短路条数,当 dist[v] > dist[u] + d[u][v] 时,更新sumt[v] 的值就是 sumt[u];当 dist[v] == dist[u] + d[u][v] 时,sumt[v] += sumt[u];判断是否存在无数条最短路,即看是否存在这样的一条边(u, v),边权为 0,并且其中一条最短路经过这条边,也就是 源点 s 到 u 的最短距离原创 2015-11-18 20:03:45 · 1954 阅读 · 0 评论 -
HDU_4780_Candy Factory(最小费用流)
题意:M 台机器生产 N 颗糖果,有如下规则(1)生产每颗糖果的时间为[si, ti],如果从pi(si < pi < ti)开始,那么产生费用 K * (pi - si);(2)每台机器开始使用时需要一个启动时间 C[i][j] 以及启动费用 D[i][j],代表 i 糖果触发 j 机器启动,需要时间C[i][j],花费D[i][j];(3)当一台机器生产完 i 糖果后 可继续生产 j 糖果,期间需要一个缓冲时间为 E[i][j],花费 F[i][j];现在问生产完所有糖果所花费的最小费用原创 2015-11-01 17:44:58 · 959 阅读 · 2 评论 -
HDU_4115_Eliminate the Conflict(2-SAT)
题意:Alice和Bob在玩剪刀石头布,神奇的是Alice能够猜出Bob要出的手法,所以她总是会赢。现在对Alice给出M个限制(a, b, k),如果 k = 1,则代表在第a轮和b轮Alice必须用不同的手法;如果 k = 0,则代表第a轮和b轮Alice必须用相同的手法。如果Alice在某局中中输了则输出 no,否则输出 yes。分析:2-SAT问题。在某一轮中Alice要想不输,则有两种手法(a1, a2)可以使用;现在当 k = 1 ,那么在 a1 == b1的情况下会发生矛盾,所以连边 a1原创 2015-11-14 15:23:57 · 849 阅读 · 0 评论 -
HDU_3666_THE MATRIX PROBLEM(差分约束+spfa+slf优化)
题意:给你一个 N*M 的矩阵 x[N][M],问是否存在这样的两个序列( a[1], a[2], a[3], …… a[N] ),( b[1], b[2], b[3], …… b[M] ),使得对于任意的 x[i][j],都有 L <= x[i][j] * a[i] / b[j] <= U。此题也可以演变为差分约束问题,对不等式进行变形可得:L / x[i][j] <= a[i] / b[j] <= U / x[i][j];如何把它变成相减的形式呢?可以两边同时取对数,即可得:log(a[i]) - l原创 2015-10-29 12:42:02 · 761 阅读 · 0 评论 -
2012-2013 Waterloo Local Contest, 13 October, 2012 A题(最短路变形)
题意:不久后滑铁卢将会变得非常冷,但是幸运的是,很多建筑都被桥梁和隧道连接着,所以你不需要总是走在外面。但是现在建筑物之间的连接是错综复杂的,很难知道某两个建筑物之间的最优路线,所以需要你写程序判断。给出 n 个点,m 条无向边,以及 p 个查询,边分为两种,一种是暴露在外面的边,用 O 表示,另一种是在室内的边,用 I 表示;最优路线遵循以下规则:1)尽可能使得路径上暴露在外面的边最少;2)在满足第一个条件的情况下,尽可能使得总路程最少。每次查询给出一个 起点 s 和终点 t,求原创 2015-11-16 23:41:59 · 1013 阅读 · 0 评论 -
POJ_3686_The Windy's(最小费用流 / KM)
题意:现在要加工M个产品,然后N个工厂,告诉产品在每个工厂加工所需的时间,一个工厂每次只能加工一个产品,现在问加工所有产品所用的时间平均数最小是多少。分析:假设有k个产品在a工厂加工,那么总时间就是k*a1 + (k-1) * a2 + …… + ak;由此我们可以把j工厂拆成N个点,然后由i产品指向k点的时候表示该产品在j工厂第k个加工,容量为1,费用为 k * Z[i][j];加入超级源点s(0)指向所有的产品,容量为1,费用为0;加入超级汇点t(N+N*M+1),工厂拆成的点都指向汇点t,容量为1原创 2015-09-11 16:05:12 · 562 阅读 · 0 评论 -
二分图带权匹配的KM算法以及费用流建模
从理论上分析,KM算法的时间复杂度比费用流要好,但是实际上和较好的费用流算法比起来运行效率是差不多的,KM算法优势仅仅在于编程容易。而对于十分稀疏的图,许多优秀的费用流算法效率是很高的。这并不说明KM算法不如费用流,毕竟在ACM竞赛中,编程的复杂度也是一个相当重要的需要考虑的因素。原创 2015-10-31 00:16:23 · 690 阅读 · 0 评论 -
hihoCoder_#1069_最近公共祖先·三(RMQ-ST模板)
分析:LCA的在线算法,RMQ-ST算法。留存作为模板。从树的根节点开始进行深度优先搜索,每次经过某一个点——无论是从它的父亲节点进入这个点,还是从它的儿子节点返回这个点,都按顺序记录下来。这样,就把一棵树转换成了一个数组。而找到树上两个节点的最近公共祖先,无非就是找到这两个节点第一次出现在数组中的位置所囊括的一段区间中深度最小的那个点。所以,方法也就出来了。步骤:1)dfs计算出每个节点的深度depth[],每个节点第一次出现的位置first[]。id[]数组保存当前节点。2)RMQ-ST原创 2015-08-07 17:26:05 · 1382 阅读 · 0 评论 -
HDU_3998_Sequence(最长上升子序列 + 网络流)
题意:求最长上升子序列以及最长上升子序列的个数(每个数只能取一次)。分析:dp + 最大流。首先每个数只能取一次,那么就要对每个点( i )进行拆点,连边 i -> i + N,容量为1;加入超级源点s,对于dp[i] == 1的点,s指向 i 连一条边 s -> i,容量为无穷大;在求最长上升子序列过程中,使得[1,i-1]当中dp[j] + 1 == dp[i]的点 j 向 i 连一条边 j + N -> i,容量为1;加入超级汇点,使得所有dp[i] == LIS的点 i 向 t 连边 i + N原创 2015-09-18 23:14:47 · 718 阅读 · 0 评论 -
HDU_2196_Computer(树上节点的最长路径 · dfs / bfs)
题意:求以树上每个节点为起点的最长路径。分析:以树上最长链的两个端点为起点分别遍历整棵树,期间更新节点的最大值,这样子就可以得到每个节点的最长路径。这个是可以证明的。所以只需要三次dfs或者bfs即可。先以任意一个点为起点,遍历整棵树,得到最长链的一个端点S,然后以此端点S遍历整棵树,得到另一个端点T,再以端点T遍历整棵树,期间更新每个节点的最大值。原创 2015-11-10 16:12:53 · 1097 阅读 · 0 评论 -
KM算法模板(HDU_2255)
最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大。解决这个问题可以用KM算法。理解KM算法需要首先理解“可行顶标”的概念。可行顶标是指关于二分图两边的每个点的一个值lx[i]或ly[j],保证对于每条边w[i][j]都有lx[i]+ly[j]-w[i][j]>=0。如果所有满足lx[i]+ly[j]==w[i][j]的边组成的导出子图中存在一个完美匹配,那么这个完美匹配肯定就是原图中的最大权匹配。理由很简单:这个匹配的权值之和恰等于所有顶标的和,由于上面的那个不等式,另外原创 2015-10-31 01:16:01 · 1372 阅读 · 0 评论 -
HDU_2686_Matrix(最小费用流)
题意:从矩阵起点(1,1) -> (n,n) -> (1,1) 经过点的权值和最大是多少。每个点只能走一次,从(1,1) -> (n,n)只能往右或往下走,从(n,n) -> (1,1)只能往左或往上走。分析:最小费用最大流。此题跟POJ_2135类似,只不过这里是点只能走一次,那么使用拆点法,把一个点(u)拆成两个点,连边 u -> u + n*n,容量为1,费用为0;然后对于每一个点u,连接右边点和下边点,容量为1,费用为权值的负值,这样子算出来后就是最小费用,再求负值就是最大权值和了。原创 2015-09-22 12:11:12 · 664 阅读 · 0 评论 -
HDU_3667_Transportation(最小费用流)
题意:求从城市1运送K单位物品到城市n的最小花费。给定的有向边,每条边都有其容量c,并且,产生的费用是 a * ( f * f ),其中f是这条边上的流量,a是给出的系数。分析:这个题貌似是刘汝佳大白书当作一种典型的建图方法:拆边法。假如给定一条边(u,v),其计费系数为a,容量为c,那么可以把(u,v)拆成5条边,费用为(1a,3a,5a,7a,9a),容量都为1,为何这样子建图是有效的呢?很明显,假设流量为1,根据最短路优先原则那么肯定走的是cost=1a的那条边;若流量为2,肯定走的是cost=(原创 2015-09-23 00:37:04 · 1284 阅读 · 0 评论 -
HDU_3376_Matrix Again(最小费用流)
题意:从矩阵起点(1,1) -> (n,n) -> (1,1) 经过点的权值和最大是多少。每个点只能走一次,从(1,1) -> (n,n)只能往右或往下走,从(n,n) -> (1,1)只能往左或往上走。分析:跟HDU_2686题意一模一样,只不过点数增加了很多,所有用vector会超时,转为结构体数组就行了,然而C++ TLE了,G++ AC。不知为何?建图:首先要想到拆点。加入超级源点s(0),s连向1,容量为2,费用为0;加入超级汇点t(N*N*2+1),点N*N*2连向t,容量为2,费用为0原创 2015-09-22 18:59:30 · 566 阅读 · 0 评论 -
HDU_2853 && HDU_3315 (最小费用流)
题意:有N个人分配M个任务(M >= N),一个人只能接受一个任务,同时一个任务只能分配给一个人,每个人做每个任务都有一个效率值 Eij ,现在告诉你初始匹配方案,要求你改动最少的匹配数,得到最大的效率。分析:最小费用最大流。此题思路并不难,难就难在如何求最少的变更匹配数。这种问题有一个通用的方法来解决,那就是把费用增加一个大于 N 的倍数 K,比如 N = 50,那么 K = 55 即可。然后呢,对于初始匹配连边时,对费用再 -1,那么求最少变更匹配数的时候就是直接等于(-cost % K),最大效率原创 2015-10-14 17:33:03 · 571 阅读 · 0 评论 -
一周图论
一周图论心得:最短路vs最小生成树原创 2014-07-27 23:11:11 · 987 阅读 · 0 评论 -
HDU_3191_How Many Paths Are There(次短路条数)
题意:给你一个有向图,求出次短路长度和条数。原创 2015-04-16 21:11:53 · 796 阅读 · 0 评论