题目地址:HDU4862
最小费用流做的还是太少。建图想不出来。。。
直接引用官方题解的话吧。。。
最小K路径覆盖的模型,用费用流或者KM算法解决,构造二部图,X部有N*M个节点,源点向X部每个节点连一条边,流量1,费用0,Y部有N*M个节点,每个节点向汇点连一条边,流量1,费用0,如果X部的节点x可以在一步之内到达Y部的节点y,那么就连边x->y,费用为从x格子到y格子的花费能量减去得到的...
分类:
其他好文 时间:
2014-07-23 13:09:07
阅读次数:
357
属于我的费用流版本终于诞生了!想来还有点小激动呢…看了下模板,之后完全按照自己的想象来写,这样在考场上也不怕啦~某人说其实费用流就是把Dinic里的BFS换成SPFA,似乎还是比较有道理的,就是addflow要做一些修改,我第一次的错误就是addflow里的循环写成了while pre[x]st d...
分类:
其他好文 时间:
2014-07-23 12:00:17
阅读次数:
297
gg。。。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define ll int
#define N 220
#define M 12345
#define inf (1<<29)
//注意 点标必须是 [0 - 汇点]
//双向边,注...
分类:
其他好文 时间:
2014-07-23 00:09:19
阅读次数:
329
题目链接:http://acdream.info/problem?pid=1128Problem Descriptionwuyiqi陷入了一个迷宫中,这个迷宫是由N*M个格子组成的矩阵。每个格子上堆放了一定数量的箱子。(i,j)表示第i行,第j列的格子。wuyiqi可以将一个格子上的箱子移动到相邻的...
分类:
其他好文 时间:
2014-07-22 22:35:53
阅读次数:
259
先说POJ3680:给n个有权(权
思路: 限制的处理:s-->开始流量为k,要求总权最大,即费用最大,所以费用取负,最小费用最大流即可。对于输入区间[a,b]:w,添加边:a-->b,流量为1,费用为-w。
对于点i,i+1,添加边,费用为0,流量无穷。显然这种处理,限制了区间最多取k次,(流量控制),跑最大流能走添加的边尽量走,且越大越好...
分类:
其他好文 时间:
2014-07-22 00:08:33
阅读次数:
292
点击打开链接
题意:给你一张N个节点的无向图,然后给出M条边,给出第 I 条边到第J条边的距离。然后问你是否存在子环,如果存在,则输出最成环的最短距离和
解析:构图:选定源点及汇点,然后将源点至个点流量置为1,花费置为0.然后使用最小费用流,当返回值流量和,即flow
其余和tour一样求法,处理一下某两点距离为最短距离即可。
#include
#include
#include
#...
分类:
其他好文 时间:
2014-07-21 22:28:07
阅读次数:
251
点击打开链接
题意:在一张N * M 的图中,有 n个房子和n个人。问最少使用多少总步数让每个房子都有且仅有一个人.
解析:构图。选取源点和汇点,从源点到人连通,费用为0(因为题目要求的是人到房子的费用)。以第i个人与第j所房子的距离作为当前费用进行构图,由于题目并不需要求出最大流( 也没给出来),因此所有连通路径的流量设置为一个相同的权值即可。
然后使用费用流求出最小费用。
#inclu...
分类:
其他好文 时间:
2014-07-21 13:38:37
阅读次数:
226
题目地址:HDU 3435
这题刚上来一看,感觉毫无头绪。。再仔细想想。。发现跟我做的前两道费用流的题是差不多的。可以往那上面转换。
建图基本差不多,只不过这里是无向图。建图依然是拆点,判断入度出度,最后判断是否满流,满流的话这时的费用流是符合要求的,输出,不能满流的话,输出NO。
代码如下:
#include
#include
#include
#include
#include...
分类:
其他好文 时间:
2014-07-18 21:28:17
阅读次数:
193
就是本来就给出了一个匹配,然后让你求一个权值最大的匹配,并且和初始匹配变动最小。#include #include #include using namespace std;const int N=400;const int MAXE=20000000;const int inf=10&&d[u]+...
分类:
其他好文 时间:
2014-07-12 14:47:39
阅读次数:
212
很常见的想法了= =#include #include #include using namespace std;const int N=400;const int MAXE=200000;const int inf=10&&d[u]+edge[j].w=0) printf("Oh, I lose ...
分类:
其他好文 时间:
2014-07-12 14:33:52
阅读次数:
167