I - Control - HDU 4289 (最大流)
下面是AC代码。
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
using namespace std; const int MAXN = ;
const int oo = 1e8+; struct Edge{int v, flow, next;}edge[MAXN*MAXN];
int Head[MAXN], cnt;
int layer[MAXN];///分层 void InIt()
{
cnt = ;
memset(Head, -, sizeof(Head));
}
void AddEdge(int u, int v, int flow)
{
edge[cnt].v = v;
edge[cnt].flow = flow;
edge[cnt].next = Head[u];
Head[u] = cnt++; swap(u, v); edge[cnt].v = v;
edge[cnt].flow = ;
edge[cnt].next = Head[u];
Head[u] = cnt++;
}
bool bfs(int start, int End)
{
queue<int> Q;Q.push(start);
memset(layer, , sizeof(layer));
layer[start] = ; while(Q.size())
{
int u = Q.front();Q.pop(); if(u == End)return true; for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(layer[v] == false && edge[j].flow)
{
layer[v] = layer[u] + ;
Q.push(v);
}
}
} return false;
}
int dfs(int u, int MaxFlow, int End)
{
if(u == End)return MaxFlow; int uflow = ; for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(layer[v]==layer[u]+ && edge[j].flow)
{
int flow = min(MaxFlow-uflow, edge[j].flow);
flow = dfs(v, flow, End); edge[j].flow -= flow;
edge[j^].flow += flow;
uflow += flow; if(uflow == MaxFlow)break;
}
} if(uflow == )
layer[u] = ;
return uflow;
}
int dinic(int start, int End)
{
int MaxFlow = ; while(bfs(start, End) == true)
MaxFlow += dfs(start, oo, End); return MaxFlow;
} int main()
{
int N, M; while(scanf("%d%d", &N, &M) != EOF)
{
int i, u, v, cost, start, End; InIt(); scanf("%d%d", &start, &End); for(i=; i<=N; i++)
{
scanf("%d", &cost);
AddEdge(i, i+N, cost);
} while(M--)
{
scanf("%d%d", &u, &v);
AddEdge(u+N, v, oo);
AddEdge(v+N, u, oo);
} printf("%d\n", dinic(start, End+N));
} return ;
}
I - Control - HDU 4289 (最大流)的更多相关文章
- hdu 4289 最大流拆点
大致题意: 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路: 最基础的拆点最大 ...
- (网络流 最大流 Dinic || SAP)Control -- hdu --4289
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4289 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 4289 Control (网络流,最大流)
HDU 4289 Control (网络流,最大流) Description You, the head of Department of Security, recently received a ...
- HDU 1532 最大流入门
1.HDU 1532 最大流入门,n个n条边,求第1点到第m点的最大流.只用EK做了一下. #include<bits/stdc++.h> using namespace std; #pr ...
- HDU 4289 Control(最大流+拆点,最小割点)
题意: 有一群恐怖分子要从起点st到en城市集合,你要在路程中的城市阻止他们,使得他们全部都被抓到(当然st城市,en城市也可以抓捕).在每一个城市抓捕都有一个花费,你要找到花费最少是多少. 题解: ...
- hdu 4289 Control(最小割 + 拆点)
http://acm.hdu.edu.cn/showproblem.php?pid=4289 Control Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 4289:Control(最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=4289 题意:有n个城市,m条无向边,小偷要从s点开始逃到d点,在每个城市安放监控的花费是sa[i],问最小花费可 ...
- 【hdu 4289】Control
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=4289 [Description] 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中 ...
- HDU 4289 Control (最小割 拆点)
Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
随机推荐
- ConcurrentDictionary的ToDictionary
如果Value是引用,那么在使用Value.Clear()的时候.会清空Value的所有元素,但是不会改变Value的引用 private static void Main() { try { var ...
- STL源码中map和set中key值不能修改的实现
前言 最近正好刚刚看完,<stl源码剖析>这本书的map和set的源码部分.但是看完之后又突然发现,之前怎么没有注意到map和set容器中key不能修改是怎么实现的.故,特此整理如下. s ...
- sdut 2831 Euclid (几何)
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2831 题意:给a, b, c, d, ...
- poshytip两个实用示例
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> < ...
- Web Api 中使用 PCM TO WAV 的语音操作
/// <summary> /// 语音[文件.上传.解码.保存(WAV)] /// </summary> [DeveloperEx("Liwei:秘书语音需求单&q ...
- iphone 如何清空UIWebView的缓存
iphonecachingapplicationcookiescacheperformance I actually think it may retain cached information ...
- 【转】如何在eclipse里关联查看android源码
原文网址:http://fengbohaishang.blog.51cto.com/5106297/1339556 以前没怎么注意过这个问题,不怎么看源码,现在发现源码确实是很好的学习资源. 直入正题 ...
- oracle归档日志增长过快处理方法
oracle归档日志一般由dml语句产生,所以增加太快应该是dml太频繁 首先查询以下每天的归档产生的情况: SELECT TRUNC(FIRST_TIME) "TIME", SU ...
- 嵌入式 hi3518c下ramdisk文件系统与文件系统烧写以及uboot中change-the-env
NULL RAM : mkdir ramdisk_test 临时挂在点 dd if=/dev/zero of=123 bs=1k count=10000 建立空硬盘 losetup /dev/loo ...
- UI控件之 ScrollView垂直滚动控件 和 HorizontalScrollView水平滚动控件的使用
1. ScrollView 垂直滚动控件的使用 ScrollView控件只是支持垂直滚动,而且在ScrollView中只能包含一个控件,通常是在< ScrollView >标签中定义了一个 ...