計蒜課/排澇(Edmond-Karp)
題目鏈接: https://nanti.jisuanke.com/t/36
題意:中文題目誒~
思路: 最大流模板題....
關於最大流算法blog:
http://www.cnblogs.com/zsboy/archive/2013/01/27/2878810.html
http://blog.csdn.net/y990041769/article/details/21026445
http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html
代碼:
#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std; const int MAXN=2e2+;
const int inf=0x7fffffff;
int capacity[MAXN][MAXN];//記錄殘留網絡流量
int flow[MAXN]; //標記從源點到當前節點實際還剩多少流量可用
int pre[MAXN]; //pre[i]爲i的父親節點
int n, m; int bfs(int src, int des){
queue<int> q;
while(!q.empty()){
q.pop();
}
for(int i=; i<=m; i++){
pre[i]=-;
}
pre[src]=;
flow[src]=inf;
q.push(src);
while(!q.empty()){
int indx=q.front();
q.pop();
if(indx==des) break;//找到了增廣徑
for(int i=; i<=m; i++){
if(i!=src&&capacity[indx][i]>&&pre[i]==-){
pre[i]=indx;
flow[i]=min(capacity[indx][i], flow[indx]);
q.push(i);
}
}
}
if(pre[des]==-) return -;
return flow[des];
} int edmond_karp(int src, int des){
int increasement=;
int sumflow=;
while((increasement=bfs(src, des))!=-){
int k=des; //利用前區尋找路徑
while(k!=src){
int last=pre[k];
capacity[last][k]-=increasement;//改變正向邊容量
capacity[k][last]+=increasement;//改變反向邊容量
k=last;
}
sumflow+=increasement;
}
return sumflow;
} int main(void){
int start, end, ci;
while(~scanf("%d%d", &n, &m)){
memset(capacity, , sizeof(capacity));
memset(flow, , sizeof(flow));
for(int i=; i<n; i++){
scanf("%d%d%d", &start, &end, &ci);
if(start==end) continue;
capacity[start][end]+=ci;//可能有重邊
}
printf("%d\n", edmond_karp(, m));
}
return ;
}
計蒜課/排澇(Edmond-Karp)的更多相关文章
- 計蒜客/數正方形(dp)
題目鏈接:https://nanti.jisuanke.com/t/44 題意:中文題誒~ 思路: 用dp[i][j]存儲以(i, j)爲左上定點的最大正方形變長,從右下角網左上角一次計算所有頂點: ...
- 計蒜客/小教官(xjb)
題目鏈接:https://nanti.jisuanke.com/t/366 題意:中文題誒~ 思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明: 然後構造的數 ...
- 网络最大流的(Edmond Karp)算法
容量网络:在有向图D=(V,A),指定一个点为发点,记作 s,指定另一个点为收点,记作 t,其余点叫作中间点.对于A的每条弧(Vi,Ai),都对应一个权数 C ≥0,称为弧(Vi , Ai)的容量,将 ...
- Linux Kernel 排程機制介紹
http://loda.hala01.com/2011/12/linux-kernel-%E6%8E%92%E7%A8%8B%E6%A9%9F%E5%88%B6%E4%BB%8B%E7%B4%B9/ ...
- 最大流(EK)
最大流 — Edmond Karp算法 Edmond Karp算法的大概思想: 反复寻找源点s到汇点t之间的增广路径,若有,找出增广路径上每一段[容量-流量]的最小值delta,若无,则结束. 在寻找 ...
- 【最大流之ek算法】HDU1532 求最大流
本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...
- 透彻网络流-wfx-最大流
前提: 我们想象一下自来水厂到你家的水管网是一个复杂的有向图,每一节水管都有一个最大承载流量.自来水厂不放水,你家就断水了.但是就算自来水厂拼命的往管网里面注水,你家收到的水流量也是上限(毕竟每根水管 ...
- 网络流小记(EK&dinic&当前弧优化&费用流)
欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废 ...
- IC芯片設計
IC從生產目的上可以分成為通用IC(如CPU,DRAM,接口芯片等)和ASIC(ApplicationSpecificIntegreted Circuit)兩種,ASIC是因應專門用途而生產的IC. ...
随机推荐
- angular cannot get /
每次遇到这问题都一脸懵逼,好像自己啥都没改咋就悲剧了 目前知道的办法是在命令行运行ng serve,它会告诉你详细错误 因为我是通过asp.net core的集成环境运行的,它没显示出详细错误
- MySQL 存储过程 (3)
以下介绍下像数据库循环插入数据操作 第一步:建立存储过程用到的信息表
- gdb coredump的使用
1 出现core dump时最好的办法是使用gdb查看coredump文件 2 使用的条件 出现问题的代码,系统,所有涉及的代码都应该一起编译,然后得到符号表,这样加载符号表,使用coredump文件 ...
- I NEED A OFFER! hdu1203
Description Speakless非常早就想出国,如今他已经考完了全部须要的考试,准备了全部要准备的材料,于是.便须要去申请学校了. 要申请国外的不论什么大学,你都要交纳一定的申请费用,这但是 ...
- 第一节 麒麟系统安装+基础环境搭建(JDK+Scala)
本文重点对没有Linux基础的人员提供高速上手的指导,假设你的开发环境已经搭建好,能够略过本章所讲内容,内容来源于网络.也谢谢这些默默讲自己经验分享的人!近期在学习大数据,有喜欢的朋友能够一起研究. ...
- Docker的跨主机连接:
1使用网桥实现跨主机容器连接. 2使用open vswitch虚礼的交换机实现跨主机容器连接. 3使用weave开源项目工具实现跨主机连接. 使用网桥实现跨主机容器连接:在同一个docker的主机中d ...
- Java WebService一个构建
参考:http://dyygusi.iteye.com/blog/2148029 下面是自己的实践路线,
- [NOIP2011提高组day2]-2-聪明的质监员
2.聪明的质监员(qc.cpp/c/pas) [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到 n 逐一编号,每个矿石都有自己的重量 wi 以及价 ...
- 给第三方apk进行系统签名的几种方式【转】
本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053 版权声明:本文为博主原创文章,未经博主允许不得转载. -------- ...
- 很好的 DHCP协议与dhcpcd分析【转】
本文转载自:http://blog.csdn.net/gjsisi/article/details/18052369 第一部分 DHCP工作过程 DHCP的工作过程主要分为以下六个阶段: 发现 ...