「LuoguP3376」 【模板】网络最大流
题目描述
如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。
输入输出格式
输入格式:
第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。
接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)
输出格式:
一行,包含一个正整数,即为该网络的最大流。
输入输出样例
说明
时空限制:1000ms,128M
数据规模:
对于30%的数据:N<=10,M<=25
对于70%的数据:N<=200,M<=1000
对于100%的数据:N<=10000,M<=100000
样例说明:

题目中存在3条路径:
4-->2-->3,该路线可通过20的流量
4-->3,可通过20的流量
4-->2-->1-->3,可通过10的流量(边4-->2之前已经耗费了20的流量)
故流量总计20+20+10=50。输出50。
题解
就是个模板题啊!QAQ
//其实就是挂个板子2333
/*
qwerta
P3376 【模板】网络最大流
Accepted
100
代码 C++,1.68KB
提交时间 2018-07-12 17:31:29
耗时/内存
140ms, 4847KB
*/
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct emm{
int e,f,v;
}a[];//邻接链表存边
int h[],cur[];//cur:当前弧优化(没什么用
int n,m,s,t;
int tot=;
inline int read()//快读
{
char ch=getchar();
int s=,x=;
while(ch<''||ch>''){if(ch=='-')s=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-;ch=getchar();}
return s*x;
}
inline void con(int l,int r,int w)//加边
{
a[++tot].f=h[l];
h[l]=tot;
//cur[l]=h[l];
a[tot].e=r;
a[tot].v=w;
return;
}
inline void scan()//读入,建图
{
n=read(),m=read(),s=read(),t=read();
for(int i=;i<=m;++i)
{
int z=read(),y=read(),l=read();
con(z,y,l);
con(y,z,);
}
return;
}
//Dinic
queue<int>q;//bfs的queue
int d[];//分层图的深度
inline bool bfs()
{
memset(d,,sizeof(d));//初始化
d[s]=;//标记源点深度
q.push(s);
for(int i=;i<=n;++i)cur[i]=h[i];//恢复cur数组
while(!q.empty())
{
int now=q.front();
q.pop();
//扩张
for(int i=h[now];i;i=a[i].f)
if(!d[a[i].e]&&a[i].v)//若未被标记过并且该边在残量网络中
{
d[a[i].e]=d[now]+;
q.push(a[i].e);
}
}
return d[t];//返回s,t是否联通
}
int dfs(int x,int al)
{
if(x==t||!al)return al;
int tot=;
for(int i=cur[x];i;i=a[i].f)
{
cur[x]=i;//当前弧优化
if(d[a[i].e]==d[x]+&&a[i].v)
{
int f=dfs(a[i].e,min(al,a[i].v));//往下找
if(f)//若非0
{
a[i].v-=f;
a[i^].v+=f;
tot+=f;
al-=f;
if(!al)break;
}
}
}
if(!tot)d[x]=-;//最有用的优化!(敲黑板
return tot;//返回流量值
}
inline void run()//运行
{
long long ans=;
while(bfs())ans+=dfs(s,);
cout<<ans;
return;
}
int main()//超短主函数(当年码风真奇怪orz
{
scan();
run();
return ;
}
「LuoguP3376」 【模板】网络最大流的更多相关文章
- 「JSOI2014」电信网络
「JSOI2014」电信网络 传送门 一个点选了就必须选若干个点,最大化点权之和,显然最大权闭合子图问题. 一个点向它范围内所有点连边,直接跑最大权闭合子图即可. 参考代码: #include < ...
- 【洛谷 p3376】模板-网络最大流(图论)
题目:给出一个网络图,以及其源点和汇点,求出其网络最大流. 解法:网络流Dinic算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #i ...
- [模板]网络最大流 & 最小费用最大流
我的作业部落有学习资料 可学的知识点 Dinic 模板 #define rg register #define _ 10001 #define INF 2147483647 #define min(x ...
- Note -「计算几何」模板
尚未完整测试,务必留意模板 bug! /* Clearink */ #include <cmath> #include <queue> #include <cstdi ...
- LOJ 2547 「JSOI2018」防御网络——思路+环DP
题目:https://loj.ac/problem/2547 一条树边 cr->v 会被计算 ( n-siz[v] ) * siz[v] 次.一条环边会被计算几次呢?于是去写了斯坦纳树. #in ...
- LOJ #2547 Luogu P4517「JSOI2018」防御网络
好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...
- 【LOJ】 #2547. 「JSOI2018」防御网络
题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N ...
- 「BJWC2010」模板严格次小生成树
题目描述 小 \(C\) 最近学了很多最小生成树的算法,\(Prim\) 算法.\(Kruskal\) 算法.消圈算法等等.正当小\(C\)洋洋得意之时,小\(P\)又来泼小\(C\)冷水了.小\(P ...
- P3376 [模板] 网络最大流
https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic EK 292ms #include <bits/std ...
随机推荐
- 【Lintcode】二叉树的最大深度 - 比较简单,用递归比较好,不递归也能做,比较麻烦
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的 ...
- JAVA微信开发:[17]如何获取所有关注用户
该方法获取所有关注公共账号的微信用户的openId集合, 再通过openId集合既可以获取所有的用户的信息. /** * 获取所有的关注用户 * * @return */ public List ...
- qt实现又一次登录
1.需求 须要实现程序操作过程中的又一次启动,即常常说的又一次登录功能 2.解决 在main函数中检測exec的返回值决定是关闭还是重新启动.使用注冊函数atexit(relogin)来实现这个功能 ...
- Lazarus安装使用
Lazarus安装使用 最后还是安装了Lazarus: 安装之后,新建了项目,还引入了Unit,就可以跑了: 学习:http://tieba.baidu.com/p/3164001113 progra ...
- 如何将MID音乐转换成MP3
1 使用Direct MIDI to MP3 Converter这个软件,你可以从下面这个网站下载:http://www.hanzify.org/index.php?Go=Show::List& ...
- vue2.0 自定义 弹窗(MessageBox)组件
组件模板 src/components/MessageBox/index.vue <!-- 自定义 MessageBox 组件 --> <template> <div c ...
- Content Provider 详解
几个概念:Cursor. Content provider . Uri .contentresolver 1. Cursor : 个人理解为数据库中的一行数据,它是每行数据的集合.它是一个类.通过它 ...
- web前端面试系列 - js中的prototype
js中一切皆为对象,其中函数也是一种对象, 而每个函数都有一个prototype属性,其值也是一个对象. 一.prototype的作用 1. 在多个实例对象之间共享数据和方法. 2. 通过原型链实现继 ...
- 为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs
为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs
- python--函数程序分析
写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作 import os #加载模块 def xiu(a,b,c): #三个接受值的形参 f = open(a,encod ...