网络流
luckyone2014
想思路是苦涩艰辛的,但是打代码是愉快的。
展开
-
hdu 1532 Drainage Ditches
//不容易爆#include#include#includeusing namespace std;#define ll int #define N 100040#define M 205000#define inf 107374182#define inf64 1152921504606846976struct Edge{ ll from, to, cap, nex原创 2014-07-11 11:11:06 · 531 阅读 · 0 评论 -
hdu 4289 Control 网络流,最小割,拆点
题意是N个点,每个点都有各自的cost, 然后M 无向条边要求割去S点到D路线中的点,使之无法从S到D ,而且要求消耗的cost和最小. 这是一道网络流的题. 算的是最小割. 根据最大流最小割定理. 可以直接算最大流;但是这题的的流量限制是在点上的.所以要我们来拆点.我这题是把i 点的 点首和点尾 分别设为 i 和 i+n; 显然 最后会得到2*n个点原创 2014-08-11 20:42:24 · 649 阅读 · 0 评论 -
hdu 4292 Food 最大流+拆点
F种食物,N个人,D种饮料先输入一排F个数字的是每种食物的量;再输入D个数字是每种饮料的量;然后N行 是每个人可以接受的食物是哪几种,第一个Y代表可以接受第一种食物再N行,是每个人可以接受的饮料是哪几种,每个人都只用给他一个食物或者饮料做法是, 设一个超级源点beg, beg 连接到 各种食物, 权值是该食物的量.然后把每个人拆开, 拆成 点头 和点尾,因为只吃一个,所以权值是1;然后把这各种食物,根据每个人的爱好连接 到 人的点头,因为只吃一个,所以权值是1在把每个人的点尾根据个人爱好原创 2014-08-13 10:51:37 · 749 阅读 · 0 评论 -
hdu 1569 方格取数(2) 网络流 最大点权独立集
给你一个m*n的格子的棋盘,每个格子里面有一个非负数。从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大。做法:因为相邻的点是不能同时取的,所以用i+j的奇偶可以分成两类点。然后把相邻的两个点连上边。我们要求的就是取若干个点,且取走的点两两之间没有边,求出其最大的点权和。这个就是求最大点权独立集。 有公式:最大点权独立集=sum-最小点全覆盖集。最小点权覆盖集,就是取若干个点,这些点覆盖到了所有的边,且所有点的点权和是最小的。由此可以原创 2015-05-01 22:30:28 · 735 阅读 · 0 评论 -
ZOJ 3229 Shoot the Bullet 有源有汇带下界的最大流
题意:n天里给m个人拍照每个人各自至少要拍Gx张然后n天内,每天给c个人拍照,当天最多拍d张。c个人 T代表编号,l代表当天给这人拍照的下限,r是上限。不行输出-1,可以输出最多n天拍多少张照片,按T输入顺序,输出该人 改天拍了几张。做法:按有源有汇带下界的网络流模型建模即可。然后要查个流量来判断 该人该天拍了多少张照片,所以,我先建的是 每天和人之间的边。原创 2015-07-18 11:22:05 · 914 阅读 · 0 评论 -
hdu 5294 Tricks Device 最短路建图+最小割
题意:1到n点有最短路。问你 最少破坏多少条路会阻断所有最短路。再问你 最多破坏多少边,仍有和原始图的最短路一样长度的最短路存在。做法:先跑最短路。然后通过 dist[i]-dist[j] == map[j][i]如果符合的话 map[j][i]就是 最短路中的一条边。然后把这些最短路的边 建图,跑最大流,流量是有多少边权相同的重边,跑出来就是最小割,也就是阻断所有最短路的最小花费。花费是每破坏一条路为1。所以出来的值,就是破坏了多少的边。然后如最大流同样的建边,跑最短路,边权为1原创 2015-07-21 22:24:51 · 1272 阅读 · 0 评论