题目描述

如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。

输入输出格式

输入格式:

第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)

输出格式:

一行,包含一个正整数,即为该网络的最大流。

输入输出样例

输入样例#1:

4 5 4 3
4 2 30
4 3 20
2 3 20
2 1 30
1 3 40
输出样例#1:

50

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=10,M<=25

对于70%的数据:N<=200,M<=1000

对于100%的数据:N<=10000,M<=100000

样例说明:

题目中存在3条路径:

4-->2-->3,该路线可通过20的流量

4-->3,可通过20的流量

4-->2-->1-->3,可通过10的流量(边4-->2之前已经耗费了20的流量)

故流量总计20+20+10=50。输出50。

思路:

  裸最大流;

来,上代码:

#include <cstdio>
#include <iostream> #define LL long long
#define maxn 10005
#define maxm 100005 using namespace std; struct EdgeType {
LL v,e,f;
};
struct EdgeType edge[maxn<<]; LL if_z,n,m,s,t,cnt=,head[maxn],deep[maxn];
LL que[maxn<<],h,tail,ans; char Cget; inline void in(LL &now)
{
now=,if_z,Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} bool BFS()
{
for(LL i=;i<=n;i++) deep[i]=-;
h=,tail=,deep[s]=,que[h]=s;
while(h<tail)
{
for(LL i=head[que[h]];i;i=edge[i].e)
if(deep[edge[i].v]<&&edge[i].f)
{
deep[edge[i].v]=deep[que[h]]+;
if(edge[i].v==t) return true;
que[tail++]=edge[i].v;
}
h++;
}
return false;
} LL flowing(LL now,LL flow)
{
if(now==t||!flow) return flow;
LL oldflow=;
for(LL i=head[now];i;i=edge[i].e)
{
if(edge[i].f<=||deep[edge[i].v]!=deep[now]+) continue;
LL pos=flowing(edge[i].v,min(flow,edge[i].f));
flow-=pos;
oldflow+=pos;
edge[i].f-=pos;
edge[i^].f+=pos;
if(flow==) return oldflow;
}
if(oldflow==) deep[now]=-;
return oldflow;
} int main()
{
in(n),in(m),in(s),in(t);
LL u,v,w;
while(m--)
{
in(u),in(v),in(w);
edge[++cnt].v=v,edge[cnt].f=w,edge[cnt].e=head[u],head[u]=cnt;
edge[++cnt].v=u,edge[cnt].f=,edge[cnt].e=head[v],head[v]=cnt;
}
while(BFS()) ans+=flowing(s,0x7fffffff);
cout<<ans;
return ;
}

最新文章

  1. 分拆素数和 HDU - 2098
  2. Linux Crontab 定时任务 命令详解
  3. Git的status命令
  4. Asp.Net+Extjs实现登录
  5. Spring中@Autowired注解与自动装配
  6. const void *a 与 void *const a 的差别
  7. Unix环境编程基础下
  8. jmeter用Firefox录制https协议证书问题解决
  9. 剑指Offer——归并排序思想应用
  10. python小技巧01递归解释内嵌
  11. c 结构体 &amp; 函数指针模拟实现一个java class(类) 和方法
  12. 12.代理模式(Proxy Pattern)
  13. 基于FastJson的通用泛型解决方案
  14. 网页html随机切换背景图片
  15. Linux CentOS 服务器搭建与初始化配置图文详解
  16. initrd in linux 2.6.32.27
  17. 文本工具 TextUtils 字符串
  18. JS 数组 foreach 和 map
  19. JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成
  20. 关于 XML 头声明和standalone 的解释

热门文章

  1. JS - Array.prototype.sort(compare)
  2. setup/hold 分析
  3. 【nginx】nginx.sh nginx 安装脚本
  4. python 取余运算
  5. Python头脑风暴1
  6. Java-basic-6-方法
  7. perl-tips-1
  8. jmeter中基于oracle的JDBC Request的使用
  9. Android兼容性测试CTS --环境搭建、测试执行、结果分析
  10. C++实现Behavioral - Observer模式 (转)