poj1273Drainage Ditches
- #include<iostream>
- /*
- 题意:就是寻找从源点到汇点的最大流!
- 要注意的是每两个点的流量可能有多个,也就是说有重边,所以要把两个点的所有的流量都加起来
- 就是这两个点之间的流量了!
- 思路:建图之后直接套用最大流算法(EK, 或者是Dinic算法) 图解Dinic算法流程!
- */
- #include<queue>
- #include<cstring>
- #include<cstdio>
- #include<algorithm>
- #define INF 0x3f3f3f3f3f3f3f3f
- #define N 205
- using namespace std;
- typedef long long LL;
- LL cap[N][N];
- int m, n;
- LL maxFlow;
- int d[N];
- queue<int>q;
- bool bfs(){
- q.push();
- memset(d, , sizeof(d));
- d[]=;
- while(!q.empty()){
- int u=q.front();
- q.pop();
- for(int v=; v<=n; ++v)
- if(!d[v] && cap[u][v]>){
- d[v]=d[u]+;
- q.push(v);
- }
- }
- if(!d[n]) return false;
- return true;
- }
- LL dfs(int u, LL flow){
- if(u==n) return flow;
- for(int v=; v<=n; ++v)
- if(d[v]==d[u]+ && cap[u][v]>){
- LL a=dfs(v, min(flow, cap[u][v]));
- if(a==) continue;//如果a==0 说明没有找到从起点到汇点的增广路, 然后换其他路接着寻找!
- cap[u][v]-=a;
- cap[v][u]+=a;
- return a;
- }
- return ;
- }
- void Dinic(){
- LL flow;
- while(bfs()){//利用bfs构造好层次图,这样dfs在寻找阻塞流的时候,就不会盲目的寻找了!
- while(flow=dfs(, INF)) maxFlow+=flow;//利用构造好的层次图不断的寻找阻塞流!
- }
- }
- int main(){
- while(scanf("%d%d", &m, &n)!=EOF){
- memset(cap, , sizeof(cap));
- while(m--){
- int u, v;
- LL w;
- scanf("%d%d%lld", &u, &v, &w);
- cap[u][v]+=w;
- }
- maxFlow=;
- Dinic();
- printf("%lld\n", maxFlow);
- }
- return ;
- }
- //EK算法同样搞定
- #include<iostream>
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define INF 0x3f3f3f3f
- using namespace std;
- typedef __int64 LL;
- LL cap[][];
- int pre[];
- LL a[];
- int m, n;
- queue<int>q;
- LL maxFlow;
- bool spfa(){
- while(!q.empty()) q.pop();
- memset(a, , sizeof(a));
- q.push();
- a[]=INF;
- while(!q.empty()){
- int u=q.front();
- q.pop();
- for(int v=; v<=n; ++v)
- if(!a[v] && cap[u][v]>){
- pre[v]=u;
- a[v]=min(a[u], cap[u][v]);
- q.push(v);
- }
- if(a[n]) break;
- }
- if(!a[n]) return false;
- return true;
- }
- void EK(){
- maxFlow=;
- while(spfa()){
- int u=n;
- maxFlow+=a[n];
- while(u!=){
- cap[pre[u]][u]-=a[n];
- cap[u][pre[u]]+=a[n];
- u=pre[u];
- }
- }
- }
- int main(){
- while(scanf("%d%d", &m, &n)!=EOF){
- memset(cap, , sizeof(cap));
- while(m--){
- int u, v;
- LL w;
- scanf("%d%d%I64d", &u, &v, &w);
- cap[u][v]+=w;
- }
- EK();
- printf("%I64d\n", maxFlow);
- }
- return ;
- }
poj1273Drainage Ditches的更多相关文章
- POJ1273Drainage Ditches[最大流]
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71559 Accepted: 2784 ...
- POJ-1273-Drainage Ditches(网络流之最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- POJ-1273-Drainage Ditches 朴素增广路
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70588 Accepted: 2743 ...
- 图论-网络流-最大流--POJ1273Drainage Ditches(Dinic)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 91585 Accepted: 3549 ...
- POJ-1273Drainage Ditches(网络流入门题,最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- poj1273--Drainage Ditches(最大流Edmond-Karp算法 邻接表实现)
最大流模板题 大部分Edmond-Karp算法代码都是邻接矩阵实现,试着改成了邻接表. #include <iostream> #include <cstdio> #inclu ...
- 【最大流Dinic模板】HDU1532&POJ1273-Drainage Ditches(16/3/6更正)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- POJ 1273 Drainage Ditches题解——S.B.S.
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67823 Accepted: 2620 ...
- I:trainage Ditches
总时间限制: 1000ms 内存限制: 65536kB描述Every time it rains on Farmer John's fields, a pond forms over Bessie's ...
随机推荐
- java word 转 pdf
这里使用jacob将word转pdf,使用的是jacob.jar import java.io.File;import com.jacob.activeX.ActiveXComponent;impor ...
- AIX常用命令总结
1.查看机器硬盘信息 :lspv :lsdev -Cc disk :lsattr -EI hdisk0 :lscfg -vl hdisk0 2.查看AIX系统版本号 : oslevel -s : os ...
- spring 装配核心笔记
(1)自动装配 开启ComponentScan(自动扫描), 通过在类使用注解@Component(默认bean id为类名第一个字符小写), 使用@Autowired实现属性,构造函数,成员函数的自 ...
- [Xamarin] 簡單使用Fragment 靜態篇 (转帖)
新的Android 開發,非常會使用到Fragment,不過官方範例有點小複雜,對初學者來說有點難消化,所以就記錄一下心得,這邊部落格將使用靜態的方法使用Fragment,Fragment 有自己的生 ...
- JedisPool异常Jedis链接处理
问题现象(jedis-2.1.0.jar) 基于JedisPool管理Jedis对象,通过get方法获取值,出现key对应的value值错误,例如: K V a a b b Jedis.get(“a” ...
- Visual Studio 2015 RC版官方下载(ISO)
微软Build2015开发者大会发布了下代开发套件Visual Studio 2015 RC候选版,覆盖企业版.专业版以及免费授权的Community社区版,原生支持开发通用型Windows Apps ...
- 《你必须知道的.NET》读书笔记一:小OO有大智慧
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象 (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初 ...
- JavaScript使用DeviceOne开发实战(五)仿ZAKER应用
关于index底下切换的的组件,可以用ViewShower实现,详见: do_ViewShower http://bbs.deviceone.net/forum.php?mod=viewthread& ...
- JavaScript函数编程-Ramdajs
在JavaScript语言世界,函数是第一等公民.JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象).这就构成 ...
- Linux Shell函数
200 ? "200px" : this.width)!important;} --> 介绍 正文 $? $?是shell变量,表示"最后一次执行命令"的 ...