hdu-4289 最大流Dinic模板题
拆点,套模板。
详情见代码。
//
// main.cpp
// hdu_4289
//
// Created by Luke on 16/8/29.
// Copyright © 2016年 Luke. All rights reserved.
//
//hdu-4289
#include <iostream>
#include <vector>
#include <queue>
#define N 500 //开两倍大小多一些
#define INF 0x3f3f3f3f
#define LL long long int
using namespace std;
int n,m;//点边
struct Node
{
int to;
LL cap;
unsigned long rev;
};
LL Min(LL a,LL b)
{
return a>b?b:a;
}
vector<Node> g[N];
int level[N];//用来存放bfs查找最短路的标号
int itor[N];//弧优化
void bfs(LL now)//预先进行广度优先搜索,避免dfs中大量无效查找
{
fill(level,level+(n<<)+,-);//初始化为-1
level[now]=;
queue<LL> q;
q.push(now);
while(!q.empty())
{
now=q.front(),q.pop();
for(int i=;i<g[now].size();i++)
{
Node &e=g[now][i];
if(e.cap>&&level[e.to]<)
level[e.to]=level[now]+,q.push(e.to);//迭代标号
}
}
}
LL dfs(LL now,LL en,LL f)
{
if(now==en)
return f;
for(int &i=itor[now];i<g[now].size();i++)//弧优化,用&迭代标号,使每次查找边跳过查找过的边
{
Node &e=g[now][i];
if(e.cap>&&level[e.to]>level[now])//如果level不满足肯定不需要查找
{
LL temp=dfs(e.to,en,Min(f,e.cap));
if(temp>)
{
e.cap-=temp;
g[e.to][e.rev].cap+=temp;
return temp;
}
}
}
return ;
}
void addEdge(int from,int to,LL cap)
{
g[from].push_back((Node){to,cap,g[to].size()});
g[to].push_back((Node){from,,g[from].size()-});
}
void ini()
{
for(int i=;i<=(n<<)+;i++)
g[i].clear();
//fill(used,used+n+1,0);
}
LL solve(LL s,LL en)
{
LL ans=;
while()
{
bfs(s);
if(level[en]<)//最短路未查找到路径,返回
return ans;
fill(itor,itor+(n<<)+,);
LL d;
while((d=dfs(s,en,INF))>)
ans+=d;
}
return ans;
}
int main(int argc, const char * argv[]) {
cin.sync_with_stdio(false);
while(cin>>n>>m)
{//本题权值在端点处,把点拆分成线段
ini();
LL s,e;
int num,num2;
cin>>s>>e;
e+=n;
for(int i=;i<=n;i++)
cin>>num,addEdge(i, i+n, num),addEdge(i+n,i,num);
for(int i=;i<m;i++)
cin>>num>>num2,addEdge(num+n, num2, INF),addEdge(num2+n,num,INF);//这里反向加边时一定要注意始末位置
cout<<solve(s,e)<<endl;
}
return ;
}
hdu-4289 最大流Dinic模板题的更多相关文章
- HDU 1532 Drainage Ditches(网络流模板题)
题目大意:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速, 本题就是让你求出最大流速,无疑要运用到求最大流了.题中m为水沟数, ...
- hdu 4289 最大流拆点
大致题意: 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路: 最基础的拆点最大 ...
- HDU 2222(AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 1711 - Number Sequence - [KMP模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- HDU 2544 最短路(模板题——Floyd算法)
题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...
- HDU 3966 Aragorn's Story(模板题)【树链剖分】+【线段树】
<题目链接> 题目大意: 给定一颗带点权的树,进行两种操作,一是给定树上一段路径,对其上每个点的点权增加或者减少一个数,二是对某个编号点的点权进行查询. 解题分析: 树链剖分的模板题,还不 ...
- HDU 1711Number Sequence【KMP模板题】
<题目链接> 题目大意: 意思是给出两个串,找出匹配串在模式串中的位置. 解题分析: KMP算法模板题. #include <cstdio> #include <cstr ...
- HDU 1114 Piggy-Bank(完全背包模板题)
完全背包模板题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std ...
随机推荐
- 使用IDEA 搭建SpringMVC +Easyui 实现最简单的数据展示功能
效果图如下: 步骤如下: 1.导入jquery-easyui-1.5.5.6 2.导入相关的SpringMVC 的jar 包 3.编写datagrid.jsp 页面 <%-- Created b ...
- python的subprocess的简单使用和注意事项
subprocess是python在2.4引入的模块, 主要用来替代下面几个模块和方法: os.systemos.spawn*os.popen*popen2.*commands.* 可以参考PEP32 ...
- 优化 MySQL: 3 个简单的小调整
我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置,你可以压榨出高达 80% 的性能提升.尤其是在服务器资源越来越便宜的当下 ...
- (二) MySQL常用命令及语法规范
- Python Web学习笔记之并发编程IO模型
了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...
- bzoj4591 / P4345 [SHOI2015]超能粒子炮·改
P4345 [SHOI2015]超能粒子炮·改 题意:求$\sum_{i=1}^{k}C(n,i)\%(P=2333)$ 肯定要先拆开,不然怎么做呢(大雾) 把$C(n,i)$用$lucas$分解一下 ...
- ms11_050漏洞攻击
ms11_050漏洞攻击 开启msfconsole 查看针对MS11_050漏洞的攻击模块 进入模块 查看该模块的具体信息 设置paylaods 查看具体参数设置 设置其相关参数 攻击 ie浏览器发生 ...
- Windows中的时间(SYSTEMTIME和FILETIME) (转载)
转载:http://blog.csdn.net/bokee/article/details/5330791 两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC ...
- Effective TensorFlow Chapter 4: TensorFlow中的广播Broadcast机制【转】
本文转载自:https://blog.csdn.net/LoseInVain/article/details/78763303 TensorFlow支持广播机制(Broadcast),可以广播元素间操 ...
- arm linux下启动ftp服务
1.环境: /home/jello # uname -aLinux 3.10.0 #2 SMP Mon Mar 6 17:52:09 CST 2017 armv7l GNU/Linux 2.使用tc ...