网络流(EK算法)
2024-09-07 18:42:43
poj1273
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
const int maxn = 205;
ll n,m;
ll G[maxn][maxn];
ll pre[maxn]; //记录路径
bool flag[maxn];
bool bfs(ll be,ll en)
{
queue<ll> q;
mem(pre,-1);
mem(flag,0);
q.push(be);
flag[be]=1;
pre[be]=be;
while(!q.empty())
{
ll front=q.front();
q.pop();
if(front==en)
return 1;
for(ll i=1;i<=n;i++)
{
if(!flag[i] && G[front][i]>0) //没有被标记并且可行流大于0
{
flag[i]=1;
pre[i]=front;
q.push(i);
}
}
}
return 0;
}
ll EK(ll be,ll en)
{
ll sum=0,mi;
while(bfs(be,en)) //找一条增广路径
{
mi=0x3f3f3f3f;
for(ll i=en;i!=be;i=pre[i]) //找最小边
{
mi=min(mi,G[pre[i]][i]);
}
for(ll i=en;i!=be;i=pre[i])
{
G[pre[i]][i]-=mi; //更新正向
G[i][pre[i]]+=mi; //更新反向
}
sum+=mi;
}
return sum;
}
int main()
{
while (scanf("%lld%lld",&m,&n)!=EOF)
{
mem(G,0);
ll x,y,z;
for(ll i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&x,&y,&z);
G[x][y]+=z;
}
printf("%lld\n",EK(1,n));
}
return 0;
}
最新文章
- ios - NSTimer中target的self是强引用问题
- Interpolation in MATLAB
- iOS YSMine 通用设置
- Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)
- 脱离rails 使用Active Record
- Delphi下使用OpenOffice+JodConverter+SWFtools进行文件转换
- Spring学习总结二——SpringIOC容器二
- Swift的闭包(一):闭包简介、闭包表达式的优化
- Mysql获取去重后的总数
- 第3天:CSS浮动、定位、表格、表单总结
- ANTS Performance Profiler 8:支持对Web请求、异步代码和WinRT的性能剖析
- Python_字符串之删除空白字符或某字符或字符串
- redhad安装gcc问题---解决依赖问题
- Quartz.NET学习笔记(一) 简介
- Android 图片加载框架 Glide4.x
- 谈谈你对spring的理解?
- sqoop mysql导入hive 数值类型变成null的问题分析
- 联想x3650m5服务器安装windows2008R2系统
- LNK2022: 元数据操作失败(8013118D): 重复类型(FactoryContext)中的布局信息不一致: (0x02000230)
- 前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值