初涉网络流 POJ 1459 Power Network
怒搞一下午网络流,又去我一块心病。
从2F到SAP再到Dinic最终过掉了。
但是书上说Dinic的时间复杂度为v*v*e。感觉也应该超时的啊,但是过掉了,好诡异。
后两种算法都是在第一种的基础上进行优化。
第一种方法就是不停的寻找增广路。后两种引进了层次网络的概念。第三种又改善了寻找增广路的方法。
如今仅仅能理解到这里了。。
。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define _INF 0x3f3f3f3f
#define Mod 6000007using namespace std;struct E
{int u,v,Max,now,next;
}edge[30000];int Top;int head[300];void Link(int u,int v,int w)
{edge[Top].u = u;edge[Top].v = v;edge[Top].Max = w;edge[Top].now = 0;edge[Top].next = head[u];head[u] = Top++;
}struct P
{int pre,now,floor;bool mark;
}sta[300];void Modify(int a,int t)
{while(t != 1){edge[sta[t].pre].now += a;t = edge[sta[t].pre].u;}
}int SAP(int s,int t,int n)
{for(int i = 1;i <= n; ++i)sta[i].mark = false;queue<int> q;q.push(s);sta[s].mark = true;sta[s].now = 2000000000;sta[s].pre = -1;while(q.empty() == false){if(sta[t].mark && sta[t].now){Modify(sta[t].now,t);return sta[t].now;}int f = q.front();q.pop();for(int p = head[f];p != -1; p = edge[p].next){if(sta[edge[p].v].mark == false && sta[edge[p].u].floor == sta[edge[p].v].floor-1 && sta[edge[p].u].floor < sta[t].floor){sta[edge[p].v].now = min(sta[f].now,edge[p].Max - edge[p].now);if(sta[edge[p].v].now == 0)continue;sta[edge[p].v].pre = p;//记录边的存储位置sta[edge[p].v].mark = true;q.push(edge[p].v);}}}return 0;
}void Updata_Floor(int s,int t,int n)
{queue<int> q;for(int i = 0;i <= n; ++i)sta[i].mark = false,sta[i].floor = n;q.push(s);sta[s].mark = true;sta[s].floor = 1;while(q.empty() == false){int f = q.front();q.pop();if(sta[t].mark && sta[t].floor <= sta[f].floor)return ;for(int p = head[f];p != -1; p = edge[p].next){if(sta[edge[p].v].mark == false && edge[p].now < edge[p].Max){sta[edge[p].v].mark = true;sta[edge[p].v].floor = sta[f].floor + 1;q.push(edge[p].v);}}}
}int dfs(int s,int t,int a)
{if(s == t)return a;int f = 0;for(int p = head[s],temp = 0;p != -1; p = edge[p].next){if((sta[edge[p].v].floor < sta[t].floor || edge[p].v == t) && sta[edge[p].v].floor == sta[s].floor+1 && edge[p].now < edge[p].Max){temp = dfs(edge[p].v,t,min(a-f,edge[p].Max-edge[p].now));edge[p].now += temp;f += temp;}}return f;
}int Dinic(int s,int t,int n)
{return dfs(s,t,200000000);
}int Cal_Max_Flow(int s,int t,int n)
{int temp,f = 0;do{Updata_Floor(s,t,n);//temp = SAP(s,t,n);temp = Dinic(s,t,n);f += temp;}while(temp);return f;
}int main()
{char s[50];int i,n,np,nc,m,u,v,w;while(scanf("%d %d %d %d",&n,&np,&nc,&m) != EOF){memset(head,-1,sizeof(head));Top = 0;for(i = 0;i < m; ++i){scanf("%s",s);sscanf(s,"(%d,%d)%d",&u,&v,&w);Link(u+2,v+2,w);}for(i = 0;i < np; ++i){scanf("%s",s);sscanf(s,"(%d)%d",&u,&w);Link(1,u+2,w);}for(i = 0;i < nc; ++i){scanf("%s",s);sscanf(s,"(%d)%d",&u,&w);Link(u+2,n+2,w);}printf("%d\n",Cal_Max_Flow(1,n+2,n+2));}return 0;
}
转载于:https://www.cnblogs.com/mqxnongmin/p/10966684.html
初涉网络流 POJ 1459 Power Network相关推荐
- POJ 1459 -- Power Network(最大流, 建图)
题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...
- POJ - 1459 Power Network(网络流-最大流)
题目链接:点击查看 题目大意:题意属实恶心,借用别的大佬的题意: 题目描述 一个电网包含一些结点(电站.消费者.调度站),这些结点通过电线连接.每个结点 uu 可能被供给 s(u) 的电能, s(u) ...
- POJ 1459 Power Network
题意:有n个据点,np个发电机.nc个用户,m条电线.给出发电机.用户.电线的电流限制,求最大网络电流. 这是带节点的网络流.事实上和原来没什么差别,仅仅要在前后都添加一个据点,在这里我加了0和n+1 ...
- Poj(1459),最大流,EK算法
题目链接:http://poj.org/problem?id=1459 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Su ...
- 【POJ - 1459】Power Network(网络流最大流,建图)
题干: A power network consists of nodes (power stations, consumers and dispatchers) connected by power ...
- Power Network POJ - 1459(EK算法模板+详解)
题意: 总共有a个节点,其中有发电站b个.用户c个和调度器a-b-c个三种节点,每个发电站有一个最大发电量,每个用户有个最大接受电量,现在有d条有向边,边有一个最大的流量代表,最多可以流出这么多电,现 ...
- [Poj 1459] 网络流(一) {基本概念与算法}
{ 凸包的内容还欠整理 先来侃侃一个月以前就想写写的网络流 本文介绍网络流 网络流的算法 及其应用 这些问题没事想想还是很有意思的 } ================================ ...
- POJ1459 Power Network —— 最大流
题目链接:https://vjudge.net/problem/POJ-1459 Power Network Time Limit: 2000MS Memory Limit: 32768K Tot ...
- 第二十七课:Power Network Synthesis(PNS)
总览 前面完成了IO pad 及macro cell的placement及congestion的消除,本节课开始说明PG network的放置并满足congestion与timing delay: 整 ...
最新文章
- AI还原宋明清三朝皇帝,还找到了最匹配的明星脸,网友:四大美女安排上
- for循环一定要指定键么 vue_vue的for循环使用方法
- python双循环zip_Python 并行遍历zip()函数使用方法
- 综合时如何插入scan_三综合环境试验箱维修时如何做出正确判断?
- 前端学习(1728):前端系列javascript之状态栏分析
- OpenFileDialog 打开文件对话框
- AWS拓展中国合作伙伴生态 加速企业数字化转型进程
- java嵌套循环语句_Java学习笔记(七) 循环语句
- 44 SD配置-销售凭证设置-定义状态参数文件
- 获知哪个函数调用了本函数及它的类名
- mysql using btree_mysql 索引中的USING BTREE 的意义
- JAVA遇见HTML——JSP篇:JSP内置对象(上)
- 后缀自动机(学习笔记)
- Automatic Brain Tumor Segmentation using Cascaded Anisotropic Convolutional Neural Networks
- Android开发中的单元测试
- de4dot 反混淆工具使用
- php curl jsonrpc,JsonRPC: Lightweight Json-RPC 2.0 client/server in PHP extension
- android程序表白,打造一款浪漫的Android表白程序
- 浅析Minecraft直播弹幕模组BakaDanmaku源码
- 南大衣哥、北袁长标,恭喜谷传民新歌准备报送央视春晚
热门文章
- AirPrint: 无交互的后台打印实现(Print without UI,iOS8+)
- TCP/IP协议族-----10、搬家IP
- Debian下搭建Samba CTDB集群。
- 使用SC命令使用(转)
- ***学习笔记教程五:***技术
- 基于Sbo SDK的Add-on插件开发实例
- AIO+BIO+NIO+同步+异步+阻塞+非阻塞
- 37 Reasons why your Neural Network is not working
- OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错
- 计算机中管理方法科学化的重要性,浅论档案科学化管理的重要性