poj-1273(最大流)
题解:纯板子题。。。
EK算法
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
#define maxn 205
#define maxx 1e12
#define ll long long
using namespace std;
ll flow[maxn];//流量到达每个顶点的剩余流量;
ll c[maxn][maxn];//残余网络;
ll n,m;
ll pre[maxn];
queue<int>que;
int bfs(int s,int e)
{
memset(pre,-1,sizeof(pre));
while(!que.empty())
que.pop();
pre[s]=0;flow[s]=maxx;que.push(s);
while(!que.empty())
{
int temp=que.front();
que.pop();
if(temp==e)
break;
for(int i=1;i<=n;i++)
{
if(i!=s&&c[temp][i]>0&&pre[i]==-1)
{
pre[i]=temp;
flow[i]=min(c[temp][i],flow[temp]);
que.push(i);
}
}
}
if(pre[e]==-1)
return -1;
else
return flow[e];
}
int maxflow(int s,int e)
{
long long int tempsum=0;
long long int anssum=0;
while((tempsum=bfs(s,e))!=-1)
{
int k=e;
while(k!=s)
{
int last=pre[k];
c[last][k]-=tempsum;
c[k][last]+=tempsum;
k=last;
}
anssum+=tempsum;
} return anssum;
}
int main()
{
int x,y,w;
while(cin>>m>>n)
{
memset(c,0,sizeof(c));
memset(flow,0,sizeof(flow));
for(int i=1;i<=m;i++)
{
cin>>x>>y>>w;
c[x][y]+=w;
}
long long int ans=maxflow(1,n);
cout<<ans<<endl;
}
return 0;
}
dinic算法
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
#define maxn 5005
#define ll long long
using namespace std;
struct Edge
{
ll next;
ll to;
ll w;
}edge[maxn];
ll head[maxn];
ll n,m;
ll cnt,s,e;
ll x,y,w;
ll depth[maxn];
void add(ll u,ll v,ll w)
{
edge[cnt].next=head[u];edge[cnt].to=v;
edge[cnt].w=w;head[u]=cnt++;
edge[cnt].next=head[v];edge[cnt].to=u;
edge[cnt].w=0;head[v]=cnt++;
}
bool bfs()
{
memset(depth,0,sizeof(depth));
queue<ll>que;
que.push(s);
depth[s]=1;
while(!que.empty())
{
ll u=que.front();que.pop();
for(ll i=head[u];i!=-1;i=edge[i].next)
{
ll v=edge[i].to;
if(edge[i].w<=0||depth[v])
continue;
depth[v]=depth[u]+1;
que.push(v);
}
}
return depth[e];
}
ll dfs(ll u,ll maxflow)
{
if(u==e)
return maxflow;
ll add=0;
for(ll i=head[u];i!=-1&&add<maxflow;i=edge[i].next)
{
ll v=edge[i].to;
if(depth[v]!=depth[u]+1)
continue;
if(edge[i].w<=0)
continue;
ll tempflow=dfs(v,min(maxflow-add,edge[i].w));
edge[i].w-=tempflow;
edge[i^1].w+=tempflow;
add+=tempflow;
}
return add;
}
ll dinic()
{
ll ans=0;
while(bfs())
{
ans+=dfs(s,1e12);
}
return ans;
}
int main()
{
while(cin>>m>>n)
{
s=1;e=n;
memset(head,-1,sizeof(head));
cnt=0;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>w;
add(x,y,w);
}
ll a=dinic();
cout<<a<<endl;
}
}
poj-1273(最大流)的更多相关文章
- UVA 820 --- POJ 1273 最大流
找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...
- poj 1273 最大流
题目链接:http://poj.org/problem?id=1273 a.EK算法:(Edmond-Karp): 用BFS不断找增广路径,当找不到增广路径时当前流量即为最大流. b.dinic算法: ...
- [转载 ]POJ 1273 最大流模板
转载 百度文库花了5分下的 不过确实是自己需要的东西经典的最大流题POJ1273 ——其他练习题 POJ3436 . 题意描述: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给 ...
- poj 1273最大流dinic算法模板
#include<stdio.h> #include<string.h> #define N 300 #define inf 0x7fffffff #include<qu ...
- poj 1273 最大流入门
明天再拍一遍 #include <iostream> #include <queue> using namespace std; ; const int INF = 0x7FF ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- poj 3281 最大流+建图
很巧妙的思想 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 本题能够想到用最大流做,那真的是太绝了.建模的方法很 ...
- poj 1273 Drainage Ditches 最大流入门题
题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...
- poj 1273 Drainage Ditches(最大流)
http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
随机推荐
- ORACLE存储过程中%TYPE和%ROWTYPE的区别
ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为 t_emp emp%rowtype ;这个语句的意思是 定义一个 ...
- Spring MVC+ Spring + Mybatis从零开始搭建一个精美且实用的管理后台
点击进入<SSM搭建精美实用的管理系统>达人课页面 SSM 框架即 SpringMVC+Spring+Mybatis,相信各位朋友在投递简历时已直观感受到它的重要性,JavaWeb 相关工 ...
- Windows Community Toolkit 3.0 - UniformGrid
概述 UniformGrid 控件是一个响应式的布局控件,允许把 items 排列在一组均匀分布的行或列中,以填充整体的可用显示空间,形成均匀的多个网格.默认情况下,网格中的每个单元格大小相同. 这是 ...
- 【全网最全的博客美化系列教程】02.添加QQ交谈链接
全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 访问记录功能改进
当用户数据非常庞大时需要一个功能,就是统计各种账户的访问系统的情况,用户数量的各种参数需要让管理者心里有个数. 1:信息系统中有多少有效账户?可以很方便能知道具体个数,让管理者心里有个数. 2:某个公 ...
- vue中使用sass
1.npm安装 npm install sass-loader --save-dev npm install node-sass --save-dev //--save写入到package.json里 ...
- Linux下php安装redis扩展(redis已经安装)
1. 下载需要的php操作redis的扩展包 (1).切换到 cd /usr/local/src (2). wget https://github.com/nicolasff/phpredis ...
- Java面试题详解二:java中的关键字
一,final1.被final修饰的类不可以被继承2.被final修饰的方法不可以被重写3.被final修饰的变量不可以被改变 重点就是第三句.被final修饰的变量不可以被改变,什么不可以被改变呢 ...
- vue-lazyload简单使用
vue-lazyload简单使用 npm地址:https://www.npmjs.com/package/vue-lazyload github地址:https://github.com/hilong ...
- Leaf——美团点评分布式ID生成系统 UUID & 类snowflake
Leaf——美团点评分布式ID生成系统 https://tech.meituan.com/MT_Leaf.html