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 ...
随机推荐
- VS相关设置
1.显示行号 工具-〉选项-〉文本编辑器-〉语言(比如C#)-〉显示-〉行号 2.“解决方案资源管理器”被拖出来了,无法还原 两种方法:1.窗口-->重置窗口布局2.工具-->导入和导出设 ...
- HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动
关于canvas 的基础知识就不多说了,可以进这个网址学习 http://www.w3school.com.cn/html5/html_5_canvas.asp 对于canvas 和 SVG 其实一开 ...
- HTML5 manifest离线缓存技术
干什么用的? 离线缓存为的是第一次请求后,根据manifest文件进行本地缓存,并且在下一次请求后进行展示(若有缓存的话,无需再次进行请求而是直接调用缓存),最根本的感觉是它使得WEB从online可 ...
- ELK学习笔记之ELK架构与介绍
0x00 为什么用到ELK 一般我们需要进行日志分析场景:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档.文本搜索太 ...
- 泛型编程之特性(traits)
特性(traits):对于某种可能会出错的返回值型别(Return Type),利用类模版进行部分特例化.其思想类似设计模式. 我们只能部分特例化类模板,而不能部分特例化函数模版.——<C++ ...
- 20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用
20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用 引言 这次免考选择了四个项目,难度也是从简到难,最开始先写一个工具的使用 想要开发安卓首先要会编写代码,但是想要逆向分 ...
- 20145321 《网络对抗》 Web基础
20145321 <网络对抗> Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签——这里面包含了处理表单数据所用CGI程序 ...
- Android实践项目汇报总结(下)
微博客户端的设计与实现(下) 第四章 系统详细功能实现 本应用实现了如下主要模块:程序启动模块.登录授权模块.主界面显示模块撰写发表微博模块.用户发布信息模块.软件设置模块. 4.1程序启动模块实现 ...
- BZOJ 1049 数字序列(LIS)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1049 题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增:(2)在( ...
- bootstrap5
列表组的使用 ul.list-group > li.list-group-item *5... 列表组中可以放置徽标: 在li中放置 span.badge. bootstrap中的情景类: 实际 ...