P3376 [模板] 网络最大流
https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic
EK 292ms
#include <bits/stdc++.h>
using namespace std; int n, m, s, t, cnt;
int l, r;
struct node {
int to, nex, val;
}E[200005];
int head[100005]; int vis[10005];
int que[10005]; struct no1 {
int to, edge;
}pre[10005]; bool bfs() {
for(int i = 1; i <= r; i++) {
vis[que[i]] = 0;
pre[i].to = -1;
pre[i].edge = -1;
}
l = 1, r = 0;
vis[s] = 1;
que[++r] = s; while(l <= r) {
int u = que[l];
l++; for(int i = head[u]; i; i = E[i].nex) {
int v = E[i].to; if(!vis[v] && E[i].val > 0) {
pre[v].to = u;
pre[v].edge = i;
if(v == t) return true;
vis[v] = 1;
que[++r] = v;
}
}
}
return false;
} int EK() {
int res = 0;
while(bfs()) {
int mi = 1e9;
for(int i = t; i != s; i = pre[i].to) {
mi = min(mi, E[pre[i].edge].val);
} for(int i = t; i != s; i = pre[i].to) {
E[pre[i].edge].val -= mi;
E[pre[i].edge ^ 1].val += mi;
}
res += mi;
}
return res;
} int main() {
scanf("%d%d%d%d", &n, &m, &s, &t);
cnt = 1; for(int i = 1; i <= m; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
E[++cnt].to = b; E[cnt].nex = head[a]; E[cnt].val = c; head[a] = cnt;
E[++cnt].to = a; E[cnt].nex = head[b]; E[cnt].val = 0; head[b] = cnt;
}
printf("%d\n", EK());
return 0;
}
Dinic多路增广 + 弧优化 199ms
#include <bits/stdc++.h>
using namespace std; int n, m, s, t, cnt;
int maxflow;
struct node {
int to, nex, val;
}E[200005];
int head[10005];
int cur[10005]; int dep[10005];
int inque[10005];
bool bfs() {
for(int i = 1; i <= n; i++) cur[i] = head[i], dep[i] = 0x3f3f3f3f, inque[i] = 0;
dep[s] = 0;
queue<int> que;
que.push(s);
inque[s] = 1; while(!que.empty()) {
int u = que.front();
que.pop();
inque[u] = 0; for(int i = head[u]; i; i = E[i].nex) {
int v = E[i].to;
if(E[i].val > 0 && dep[v] > dep[u] + 1) {
dep[v] = dep[u] + 1;
if(!inque[v]) {
inque[v] = 1;
que.push(v);
}
}
}
}
if(dep[t] != 0x3f3f3f3f) return true;
else return false;
} int vis;
int dfs(int x, int flow) {
int rlow = 0;
if(x == t) {
vis = 1;
maxflow += flow;
return flow;
}
int used = 0; //当前使用了多少
for(int i = cur[x]; i; i = E[i].nex) {
cur[x] = i; //更新弧
int v = E[i].to;
if(E[i].val > 0 && dep[v] == dep[x] + 1) {
if(rlow = dfs(v, min(flow - used, E[i].val))) {
used += rlow;
E[i].val -= rlow;
E[i ^ 1].val += rlow;
if(used == flow) break; //用完了
}
}
}
return used;
} void dinic() {
int lowflow;
while(bfs()) {
vis = 1;
while(vis) {
vis = 0;
dfs(s, 1000000000);
}
}
} int main() {
scanf("%d%d%d%d", &n, &m, &s, &t);
cnt = 1;
maxflow = 0; for(int i = 1; i <= m; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
E[++cnt].to = b; E[cnt].nex = head[a]; E[cnt].val = c; head[a] = cnt;
E[++cnt].to = a; E[cnt].nex = head[b]; E[cnt].val = 0; head[b] = cnt;
}
dinic();
printf("%d\n", maxflow);
return 0;
}
P3376 [模板] 网络最大流的更多相关文章
- 【洛谷 p3376】模板-网络最大流(图论)
题目:给出一个网络图,以及其源点和汇点,求出其网络最大流. 解法:网络流Dinic算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #i ...
- 【Luogu P3376】网络最大流
Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成 ...
- [模板]网络最大流 & 最小费用最大流
我的作业部落有学习资料 可学的知识点 Dinic 模板 #define rg register #define _ 10001 #define INF 2147483647 #define min(x ...
- P3376 【模板】网络最大流
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- P3376 【模板】网络最大流dinic算法
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- P3376 【模板】网络最大流(luogu)
P3376 [模板]网络最大流(luogu) 最大流的dinic算法模板(采取了多种优化) 优化 时间 inline+当前弧+炸点+多路增广 174ms no 当前弧 175ms no 炸点 249 ...
- P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)
P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...
- 洛谷 P3376 【【模板】网络最大流】
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui. ...
- 洛谷 P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
随机推荐
- 【Qt】实现程序重启的两种方法
Qt5/PyQt5 实现程序重启的两种方法 前言 最近在写一个开源项目,需要实现一个程序自动重启的功能.尝试了好几种方式,效果均不太理想. 一开始的实现思路是,记为思路一吧.大概就是写一些 shell ...
- 十四:SQL注入之类型及提交注入
简要明确参数类型 数字,字符,搜索,json等 简要明确请求方法 GET,POST,COOKIE,REQUEST,HTTP头 其中SQL语句干扰符号:' " % ) } 等,具体查看用法 非 ...
- 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)
声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...
- 【Spring】Spring中的Bean - 5、Bean的装配方式(XML、注解(Annotation)、自动装配)
Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录 Bean的装配方式 基于XML的装配 基于注解 ...
- ctfshow—web—web3
打开靶机 提示是文件包含漏洞 测试成功 https://d7c9f3d7-64d2-4110-a14b-74c61f65893c.chall.ctf.show/?url=../../../../../ ...
- Netty学习:ChannelHandler执行顺序详解,附源码分析
近日学习Netty,在看书和实践的时候对于书上只言片语的那些话不是十分懂,导致尝试写例子的时候遭遇各种不顺,比如decoder和encoder还有HttpObjectAggregator的添加顺序,研 ...
- [usaco2008 Oct]Pasture Walking 牧场旅行
题目描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共 ...
- MYSQL面试题-索引
MYSQL面试题-索引 引自B站up编程不良人:https://www.bilibili.com/video/BV19y4y127h4 一.什么是索引? 官方定义:索引是一种帮助mysql提高查询效率 ...
- 动态改变div标签中的内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Databricks 第9篇:Spark SQL 基础(数据类型、NULL语义)
Spark SQL 支持多种数据类型,并兼容Python.Scala等语言的数据类型. 一,Spark SQL支持的数据类型 整数系列: BYTE, TINYINT:表示1B的有符号整数 SHORT, ...