【POJ 1459 power network】
不可以理解的是,测评站上的0ms是怎么搞出来的。
这一题在建立超级源点和超级汇点后就变得温和可爱了。其实它本身就温和可爱。对比了能够找到的题解:
(1)艾德蒙·卡普算法(2)迪尼克算法(3)改进版艾德蒙·卡普算法(MY METHOD)
不去管那个0ms的吧,那么(3)号算法最为美妙【它的别名是:ISAP】,时间可观。
这个就算是一个ISAP的模板吧(除了输入的难看的几行外,其余均是标准的大米饼牌模板!)
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<cstring>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define fo(i,a,x) for(int i=a[x],v=e[i].v;i>-1;i=e[i].next,v=e[i].v)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;const int N=;
struct E{int v,next,flow,cap;}e[N*N];
int n,n_power,n_user,m,S,T,head[N],k=,d[N];
int num[N],cur[N],preE[N],preN[N];
void ADD(int u,int v,int flow,int cap){e[k]=(E){v,head[u],flow,cap};head[u]=k++;}
void BFS()
{
queue<int>q;bool vis[N]={};q.push(T);d[T]=;
while(!q.empty())
{
int u=q.front();q.pop();
fo(i,head,u)if(!e[i].cap&&!vis[v])
vis[v]=,d[v]=d[u]+,q.push(v);
}
}
int aug(){int u,a=;
u=T;while(u!=S){int i=preE[u];a=min(a,e[i].cap-e[i].flow);u=preN[u];}
u=T;while(u!=S){int i=preE[u];e[i].flow+=a;e[i^].flow-=a;u=preN[u];}return a;}
int main(){while(~scanf("%d%d%d%d",&n,&n_power,&n_user,&m))
{
S=;T=n+;char _;mem(head,-);
go(i,,m){int u,v,cap;scanf(" %c%d%c%d%c%d",&_,&u,&_,&v,&_,&cap);
u++,v++;ADD(u,v,,cap);ADD(v,u,,);}
go(i,,n_power){int v,cap;scanf(" %c%d%c%d",&_,&v,&_,&cap);
v++;ADD(S,v,,cap);ADD(v,S,,);}
go(i,,n_user){int u,cap;scanf(" %c%d%c%d",&_,&u,&_,&cap);
u++;ADD(u,T,,cap);ADD(T,u,,);}BFS();mem(num,); go(i,,n+)num[d[i]]++,cur[i]=head[i];
int u=S,flow=;
while(d[S]<T+)
{
u==T?flow+=aug(),u=S:;bool retreat=;
fo(i,cur,u) if(e[i].cap>e[i].flow&&d[u]==d[v]+)
{retreat=;cur[u]=preE[v]=i;preN[v]=u;u=v;break;} if(!retreat)continue; int Min=T;fo(i,head,u){if(e[i].cap>e[i].flow)Min=min(Min,d[v]);}
if(!(--num[d[u]]))break;num[d[u]=Min+]++;
cur[u]=head[u];u==S?:u=preN[u];
}
printf("%d\n",flow);
}return ;}//Paul_Guderian
【改进版艾德蒙·卡普算法】
网络流两个学习要点:学会转化问题,学会几个模型?你是在质疑神奇大米饼的权威吗?那就给你个大米饼!
ZBH不给我玩以撒的结合…我写了这篇博客来表达愤怒!
【POJ 1459 power network】的更多相关文章
- POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)
POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Networ ...
- poj 1459 Power Network
题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...
- poj 1459 Power Network【建立超级源点,超级汇点】
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 25514 Accepted: 13287 D ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- POJ 1459 Power Network(网络流 最大流 多起点,多汇点)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 22987 Accepted: 12039 D ...
- 2018.07.06 POJ 1459 Power Network(多源多汇最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...
- 网络流--最大流--POJ 1459 Power Network
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #incl ...
- POJ 1459 - Power Network 【Ek-最大流】
<题目链接> 题目大意:给出 n 个点,其中包括 np个发电站,nc 个消费者, 剩下的全部都是中转点,再给出 这些点中的m 条边,代表这两点间的最大传输电量,并且给出发电站的最大发送电量 ...
- poj 1459 Power Network(增广路)
题目:http://poj.org/problem?id=1459 题意:有一些发电站,消耗用户和中间线路,求最大流.. 加一个源点,再加一个汇点.. 其实,过程还是不大理解.. #include & ...
随机推荐
- 几款有用的AndroidStudio插件
1.Android Parcelable code generator 顾名思义,这是个生成实现了Parcelable接口的代码的插件. 在你的类中,按下alt + insert键弹出插入代码的上下文 ...
- 【iOS】swift 保持代码优美的10个方法
这篇Swift风格指南与你看到的其他的指南有所不同,此篇指南主要焦点集中在打印和Web展示的可读写上.我们创建此篇风格指南的目的,是为了让我们的图书.教程以及初学者套件中的代码保持优美和一致,即使我们 ...
- Python基础学习篇章二
一. Python如何运行程序 1. 在交互模式下编写代码 最简单的运行Python程序的方法是在Python交互命令行中输入程序.当然有很多方法可以开始这样的命令行,比如IDE,系统终端.如果你已经 ...
- Eclipse常用快捷键总结
Eclipse常用快捷键总结 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双斜杠注释) ...
- AngularJS1.X学习笔记13-动画和触摸
本文主要涉及了ngAnimation和ngTouch模块,自由男人讲的比较少,估计要用的时候还要更加系统的学习一下. 一.安装 没错,就是酱紫. 二.玩玩动画 <!DOCTYPE html> ...
- Mysql数据库mys和ora库的备份与恢复脚本
!/bin/bash Time=$(date +%Y%md%H%M%S) Back_dir="$HOME/mysqlback/${Time}" function Detect_u_ ...
- Spring Security入门(3-8)Spring Security获取session中的UserDetail
- python当中的 可迭代对象 迭代器
学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样 ...
- WebApi 基于token的多平台身份认证架构设计
1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用 ...
- U盘分区后合并
1.首先把你的U盘插在电脑上,点击开始→所有程序→附件→命令提示符(前面这步骤也可以直接用Win+R组合键打开"运行",之后输入cmd也可打开命令提示符). 2.然后在命令提示窗口 ...