![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
范晓天
给我一片蓝天,让我飞得更高……
展开
-
UVA 10249 The Grand Dinner
<br />晚宴桌子分配,同一个队伍的人不能坐在同一个桌子旁边。求存不存在这样的分配方案,存在则输出方案。<br /> <br />典型的最大流。<br /> <br />建图方法:从源点连一条边到所有的队伍,流量为队伍成员数量;<br />从所有桌子连一条边到汇点,流量为桌子容量;<br />从每个队伍连一条边到每一个桌子,流量为1,表示这个队伍到这个桌子只能去一个人。<br /> <br />求最大流,若最大流量等于所有人数,则表示可行,否则不可行。<br /> <br />输出方案可以从剩余网络中得到原创 2010-10-09 12:00:00 · 488 阅读 · 0 评论 -
Dinic 数组实现
<br />int g[N][N]; /*剩余流*/bool vis[N]; /*标记数组*/int level[N];int n, m; /*顶点数,边数*/int src, sink; /*scr源 sink汇*/int build(){ /* 建图 */}int find(int x) { for (int i = 1; i <= n; i++) { if (g[x][i] != 0 && level[i] == level[x] +原创 2010-10-09 12:17:00 · 259 阅读 · 0 评论 -
Dinic 邻接表实现
<br />/* Dinic最大流 O(V^2 * E)INIT: ne=2; head[]置为0; addedge()加入所有弧;CALL: flow(n, s, t); */#define typec int // type of coststruct edge { int x, y, nxt; typec c;} bf[E];int ne, head[N], cur[N], ps[N], dep[N];void addedge(int x, int y,原创 2010-10-09 12:50:00 · 448 阅读 · 0 评论 -
最大流 FF 模板
#define N 205#define inf 0x7fffffint edge[N][N];int chk[N],n;int father[N];int Ford_Fulkerson(){ while(1) { queue q; memset(chk,0,sizeof(chk)); memset(father,-1,sizeof(father)); int now; chk[0]=1; q.push(0);原创 2010-10-09 12:52:00 · 398 阅读 · 0 评论 -
HDU 2485 Destroying the bus stations
<br />网络流 <br /> <br />要求割点的数量,可以转化为求割边的数目,即拆点。<br /> <br />先bfs两次,求出起点和终点到其余各点的距离。然后将每个点拆成两个点,容量为 1 。如果dist1[i]+dist2[j]<k,则给 i' 和 j 连一条边,容量为 1 。<br /> <br />最后求最大流,就是答案。<br /> <br />/* * File: HDU 2485 Destroying the bus stations * Author: xiaotia原创 2010-10-10 19:13:00 · 1065 阅读 · 0 评论 -
HDU 1045 Fire Net
<br />二分匹配飘过<br /> <br />好久没有写过二分匹配的题目了,今天写了一个,有点手生,好长时间才建出图来。<br /> <br />建图方法:横竖分区。先看每一列,同一列相连的空地同时看成一个点,显然这样的区域不能够同时放两个点。这些点作为二分图的X部。同理在对所有的行用相同的方法缩点,作为Y部。<br />连边的条件是两个区域有相交部分。最后求最大匹配就是答案。<br /> <br />比如样例一:<br /> 4<br />.X..<br />....<br />XX..<原创 2010-10-14 21:12:00 · 802 阅读 · 0 评论 -
PKU 2112 Optimal Milking
<br /> * File: PKU 2112 Optimal Milking<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月16日, 上午9:26<br /> * 题解:最大流+二分验证<br /> * 建图方法:首先从源点到所有 milk machine 连一条边,容量为 M ,<br /> * 再从所有的 cow 连一条边到汇点,容量为 1 。<br /> * 二分一个距离 dis,如果某一个 milk原创 2010-10-16 10:20:00 · 330 阅读 · 0 评论 -
ZOJ 2314 Reactor Cooling
<br />无源汇上下界可行流<br /><br /><br />这算是上下界网络流问题里最简单的了吧。<br /><br /><br />做法:添加源点 s 和汇点 t 。<br />拆边,对于边(u,v,b,c),添边:(u,v,c-b),(s,v,b),(u,t,b)。<br />求 s 到 t 的最大流,若 maxflow==sigma(bi) 则有解,否则无解。<br /> <br />#include<stdio.h>#include<iostream>#include<string.原创 2010-10-18 21:06:00 · 435 阅读 · 0 评论 -
ZJU 3362 Beer Problem
/* * File: ZJU 3362 Beer Problem * Author: xiaotian @ hnu * Created on 2010年10月30日, 下午12:05 * 解题: */#include#include#include#includeusing namespace std;const int N = 105;const int E = 8100;const int inf = 0x7ffffff;int minc原创 2010-10-30 12:27:00 · 319 阅读 · 0 评论