計蒜課/排澇(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. ...
随机推荐
- Android-addToBackStack使用和Fragment执行流程
文章来源:https://blog.csdn.net/wenxuzl99/article/details/16112725 在使用Fragment的时候我们一般会这样写: FragmentTransa ...
- poj 2154 Color < 组合数学+数论>
链接:http://poj.org/problem?id=2154 题意:给出两个整数 N 和 P,表示 N 个珠子,N种颜色,要求不同的项链数, 结果 %p ~ 思路: 利用polya定理解~定理内 ...
- ElasticSearch(十二)批量查询mget
1.批量查询的好处 就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减 ...
- mongodb学习之:数据库命令以及固定集合
如何我们要删除一个集合,可以采用db.test.drop()的方式,其实在这背后,这个函数运行的是drop命令.可以用runCommand达到同样的效果. 我们首先新建一个集合作为测试使用: > ...
- Apache http server和tomcat的区别
Apache官方网站:http://www.apache.org/Tomcat官方网站:http://tomcat.apache.org/ 1. Apache是web服务器,Tomcat是应用(jav ...
- cgic 中文文档
CGIC英文文档地址:https://boutell.com/cgic/ cgic是用c写cgi程序的一个很小的库,所以英文文档也很少,为了便于日后复习翻看,心血来潮,翻译了一遍. 1. 什么是cgi ...
- handler message messagequeue详解
long when 应该被处理的时间值,如果是即时发送,即为当前时间,如果是延迟发送则为当前时间+延迟时间
- git项目.gitignore文件不生效解决办法
配置好.gitignore文件如下: HELP.md /target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### .apt_generated .clas ...
- Canvas HTML5
不支持的时候记得: <canvas id="stockGraph" width="150" height="150"> curr ...
- 在新建FileInputStream时使用当前相对路径或者绝对路径作为参数的问题
今天在写一个关于配置Excel导出路径通过properties文件配置的需求,通过查询我得知 properties文件通过 FileInputStream 读取