拆点,套模板。

详情见代码。

//
// 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模板题的更多相关文章

  1. HDU 1532 Drainage Ditches(网络流模板题)

    题目大意:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速, 本题就是让你求出最大流速,无疑要运用到求最大流了.题中m为水沟数, ...

  2. hdu 4289 最大流拆点

    大致题意:     给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路:     最基础的拆点最大 ...

  3. HDU 2222(AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...

  4. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. HDU 1711 - Number Sequence - [KMP模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  6. HDU 2544 最短路(模板题——Floyd算法)

    题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...

  7. HDU 3966 Aragorn's Story(模板题)【树链剖分】+【线段树】

    <题目链接> 题目大意: 给定一颗带点权的树,进行两种操作,一是给定树上一段路径,对其上每个点的点权增加或者减少一个数,二是对某个编号点的点权进行查询. 解题分析: 树链剖分的模板题,还不 ...

  8. HDU 1711Number Sequence【KMP模板题】

    <题目链接> 题目大意: 意思是给出两个串,找出匹配串在模式串中的位置. 解题分析: KMP算法模板题. #include <cstdio> #include <cstr ...

  9. HDU 1114 Piggy-Bank(完全背包模板题)

    完全背包模板题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std ...

随机推荐

  1. NIO_2

    导语 缓冲器的设计的是新IO模型中最基础的一部分.因为新IO模型中要求所有的IO操作都需要进行缓冲.在新的IO模型中,不再向输出流写入数据和从数据流中读取数据了,而是要从缓冲区中读写数据.缓冲区可是是 ...

  2. linux常用命令:chown 命令

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  3. 配置QT Mingw & opencv

    可以直接从这里下载别人构建好的 https://github.com/huihut/OpenCV-MinGW-Build --------------------------------------- ...

  4. Python入门之面向对象的多态

    本章目录: 一.多态 二.多态性 三.鸭子类型 ============================== 一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import ab ...

  5. tomcat应用org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]异常的根本原因

    早上,有个应用又挂了,客户端打开时报404,看进程是还在的.倒回第一次异常的地方,可见catalina.out中有如下信息: 08:46:56.646 [ContainerBackgroundProc ...

  6. 20145104张家明 《Java程序设计》第三次实验设计

    合作伙伴是20145103 下面是我们的git成果 首先下载他托管上去的代码 然后运行下载的代码 之后对下载的代码进行修改 然后推送上去 下载修改后的代码并运行 •软件工程是把系统的.有序的.可量化的 ...

  7. 20145310《网络对抗》注入shellcode及Return-to-libc

    Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...

  8. static理解

    static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在. 一个static变量单独划分一块存储空间,不与具体的对象绑定 ...

  9. P1471 方差

    题目 luogu 思路 \[\frac{1}{n}*\sum_{1}^{n}( a_{i}-A)^{2}\] \[\frac{1}{n}*\sum_{1}^{n}( a_{i}^2-2*A*a_{i} ...

  10. php跨域

    <?php header('Content-type:text/html; charset="utf-8"'); $url = 'http://10.32.41.194:80 ...