POJ 1459 && ZOJ 1734--Power Network【最大流dinic】
| Time Limit: 2000MS | Memory Limit: 32768K | |
| Total Submissions: 25108 | Accepted: 13077 |
Description
0 <= c(u) <= min(s(u),cmax(u)) of power, and may deliver an amount d(u)=s(u)+p(u)-c(u) of power. The following restrictions apply: c(u)=0 for any power station, p(u)=0 for any consumer, and p(u)=c(u)=0 for any dispatcher. There is at most one power
transport line (u,v) from a node u to a node v in the net; it transports an amount 0 <= l(u,v) <= lmax(u,v) of power delivered by u to v. Let Con=Σuc(u) be the power consumed in the net. The problem is to compute the maximum value of
Con.

An example is in figure 1. The label x/y of power station u shows that p(u)=x and pmax(u)=y. The label x/y of consumer u shows that c(u)=x and cmax(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and lmax(u,v)=y.
The power consumed is Con=6. Notice that there are other possible states of the network but the value of Con cannot exceed 6.
Input
(u,v)z, where u and v are node identifiers (starting from 0) and 0 <= z <= 1000 is the value of lmax(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of pmax(u). The data set
ends with nc doublets (u)z, where u is the identifier of a consumer and 0 <= z <= 10000 is the value of cmax(u). All input numbers are integers. Except the (u,v)z triplets and the (u)z doublets, which do not contain white spaces, white spaces can
occur freely in input. Input data terminate with an end of file and are correct.
Output
Sample Input
2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20
7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7
(3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5
(0)5 (1)2 (3)2 (4)1 (5)4
Sample Output
15
6
Hint
data set encodes the network from figure 1.
题目给出非常多都是废话,特别是符号s(u),d(u),Con还有那条公式都别管。混淆视听
难点在于构图
电站p(u)均为源点。用户c(u)均为汇点,中转站当普通点处理
结点和边都有 x/y(流量和容量),这个非常easy使人产生矛盾(由于学习最大流问题是。仅仅有 边 才有流量和容量。可是不难发现。题目所给的例图中有多个源点,多个汇点,多个普通点。仅仅有源点和汇点才标有 x/y,普通点没有标x/y,并且所给出的全部边都有x/y。 这无疑在促使我们对图做一个变形: 建议一个超级源 s,一个超级汇 t。使 s 指向全部源点,并把源点的 容量y 分别作为这些边的 容量,使全部汇点指向 t。并把汇点的容量y分别作为这些边的 容量,然后本来是源点和汇点的点,全部变为普通点。这样就把“多源多汇最大流”变形为“单源单汇最大流”问题。
学习最大流问题时。会发现边上的流量值是给定初始值的,可是这题的输入仅仅有容量。没有流量,非常多人立即感觉到无从入手。事实上边上的流量初始值为多少都没有所谓,解最大流须要用到的仅仅有容量。
可是一般为了方便起见, 会把全部边的流量初始化为0。
这样做有一个最大的优点,就是能够回避 反向弧 的存在。
以上解析来自http://www.cnblogs.com/lyy289065406/archive/2011/07/30/2122116.html
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#define maxn 300
#define maxm 100000
#define INF 0x3f3f3f3f
using namespace std; int head[maxn], cur[maxn], cnt;
int dist[maxn], vis[maxn];
int n, np, nc, m; struct node{
int u, v, cap, flow, next;
}; node edge[maxm]; void init(){
cnt = 0;
memset(head, -1, sizeof(head));
} void add(int u, int v, int w){
edge[cnt] = {u, v, w, 0, head[u]};
head[u] = cnt++;
edge[cnt] = {v, u, 0, 0, head[v]};
head[v] = cnt++;
} void getmap(){
int u, v, w;
while(m--){
scanf(" (%d,%d)%d", &u, &v, &w);//注意有空格
add(u, v, w);
}
while(np--){
scanf(" (%d)%d", &u, &w);
add(n, u, w);// n 为源点, 源点和电站连接
}
while(nc--){
scanf(" (%d)%d", &u, &w);
add(u, n + 1, w); // n + 1 为汇点 ,消费者和汇点连接
}
} bool BFS(int st ,int ed){
queue<int>q;
memset(vis, 0 ,sizeof(vis));
memset(dist, -1, sizeof(dist));
vis[st] = 1;
dist[st] = 0;
q.push(st);
while(!q.empty()){
int u = q.front();
q.pop();
for(int i = head[u]; i != -1; i = edge[i].next){
node E = edge[i];
if(!vis[E.v] && E.cap > E.flow){
vis[E.v] = 1;
dist[E.v] = dist[u] + 1;
if(E.v == ed)
return true;
q.push(E.v);
}
}
}
return false;
} int DFS(int x, int ed, int a){
if(x == ed || a == 0)
return a;
int flow = 0, f;
for(int &i = cur[x]; i != -1; i = edge[i].next){
node &E = edge[i];
if(dist[E.v] == dist[x] + 1 && (f = DFS(E.v, ed, min(a, E.cap - E.flow))) > 0){
E.flow += f;
edge[i ^ 1].flow -= f;
a -= f;
flow += f;
if(a == 0)
break;
}
}
return flow;
} int maxflow(int st, int ed){
int flowsum = 0;
while(BFS(st,ed)){
memcpy(cur, head, sizeof(head));
flowsum += DFS(st, ed, INF);
}
return flowsum;
} int main (){
while(scanf("%d%d%d%d", &n, &np, &nc, &m) != EOF){
init();
getmap();
printf("%d\n", maxflow(n, n + 1));
}
return 0;
}
POJ 1459 && ZOJ 1734--Power Network【最大流dinic】的更多相关文章
- 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 ...
- poj1087 A Plug for UNIX & poj1459 Power Network (最大流)
读题比做题难系列…… poj1087 输入n,代表插座个数,接下来分别输入n个插座,字母表示.把插座看做最大流源点,连接到一个点做最大源点,流量为1. 输入m,代表电器个数,接下来分别输入m个电器,字 ...
- POJ1459 Power Network —— 最大流
题目链接:https://vjudge.net/problem/POJ-1459 Power Network Time Limit: 2000MS Memory Limit: 32768K Tot ...
- POJ-1459-Pwoer Network(最大流Dinic, 神仙输入)
链接: https://vjudge.net/problem/POJ-1459 题意: A power network consists of nodes (power stations, consu ...
- POJ 1459 Power Network 最大流(Edmonds_Karp算法)
题目链接: http://poj.org/problem?id=1459 因为发电站有多个,所以需要一个超级源点,消费者有多个,需要一个超级汇点,这样超级源点到发电站的权值就是发电站的容量,也就是题目 ...
- Power Network(最大流(EK算法))
http://poj.org/problem?id=1459 题意:有一个电路网络,每个节点可以产生.传递.消耗若干电量,有点线连接结点,每个电线有最大传输量,求这个网络的最大消费量. 思路:从源点到 ...
- poj1459 Power Network --- 最大流 EK/dinic
求从电站->调度站->消费者的最大流,给出一些边上的容量.和电站和消费者能够输入和输出的最大量. 加入一个超级源点和汇点,建边跑模板就能够了. 两个模板逗能够. #include < ...
- poj 1459 Power Network
题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
随机推荐
- Android学习记录一——安装环境
一直想接触这块,但是却一直耽搁到现在.找过几回资料,找过几回安装包,这两天受了些刺(gong)激(zi),决定静下心来,一点点开始吃. 接触c#都是从门外汉开始,谈不上任何编程基础,所以接触andro ...
- hbase源码系列(十)HLog与日志恢复
HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢复,下面先看看HLog的图. 旧版的HLog是实 ...
- MySQL优化之——安全地关闭MySQL实例
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46812371 关闭过程: 1.发起shutdown,发出 SIGTERM信号 2 ...
- Android训练课程(Android Training) - 高效的显示图片
高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...
- thymeleaf 解析html时,出现 SAXParseException: The content of elements must consist of well-formed characte
thymeleaf 解析html时,出现 SAXParseException: The content of elements must consist of well-formed characte ...
- 再谈git的http服务
因为git服务器搬迁,需要重新安装git服务器,在网上搜索了下,发现之前的方法太复杂,复杂到自己都没彻底弄明白.其实通过git自带的git-http-backend脚本配合apache2的http服务 ...
- R语言字符串替换
R gsub Function gsub() function replaces all matches of a string, if the parameter is a string vecto ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (十二)
在本项目中关于天空盒子的使用的配置方法: 给场景添加天空盒 第二种方式 在菜单栏中选择:Edit->Render Setting,在保证不在选择场景中其它文件的前提下,Inspector面 ...
- Generalization and Equilibrium in Generative Adversarial Nets
Paper link: https://arxiv.org/abs/1703.00573 Blog link: http://www.offconvex.org/2017/03/30/GANs2/ G ...
- HtmlUnitDriver 网页内容动态抓取
#抓取内容 WebDriver driver = new HtmlUnitDriver(false); driver.get(url); String html = driver.getPageSou ...