POJ训练计划1459_Power Network(网络流最大流/Dinic)
解题报告
这题建模实在是好建。,,好贱。。,
给前向星给跪了,纯dinic的前向星居然TLE,sad。,,回头看看优化,。。
矩阵跑过了。2A,sad,,,
/*************************************************************************
> File Name: PowerN.cpp
> Author: _nplus
> Mail: jun18753370216@gmail.com
> Time: 2014年07月19日 星期六 09时30分23秒
************************************************************************/ #include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
#define inf 99999999
#define N 510
#define M N*N
using namespace std;
int edge[N][N],l[N],n,m,nc,np;
int bfs()
{
queue<int >Q;
memset(l,-1,sizeof(l));
while(!Q.empty())
Q.pop();
l[n]=0;
Q.push(n);
while(!Q.empty())
{
int u=Q.front();
Q.pop();
for(int i=0; i<=n+1; i++)
{
if(edge[u][i]&&l[i]==-1)
{
l[i]=l[u]+1;
Q.push(i);
}
}
}
if(l[n+1]>0)return 1;
else return 0;
}
int dfs(int x,int f)
{
if(x==n+1)return f;
int a;
for(int i=0; i<=n+1; i++)
{
if(edge[x][i]&&(l[i]==l[x]+1)&&(a=dfs(i,min(edge[x][i],f))))
{
edge[x][i]-=a;
edge[i][x]+=a;
return a;
}
}l[x]=-1;//加上时间优化了15倍,,。sad,。,
return 0;
}
int main()
{
int i,j,u,v,w;
while(~scanf("%d%d%d%d",&n,&np,&nc,&m))
{
memset(edge,0,sizeof(edge));
for(i=0; i<m; i++)
{
while(getchar()!='(');
scanf("%d,%d)%d",&u,&v,&w);
edge[u][v]=w;
}
for(i=0; i<np; i++)
{
while(getchar()!='(');
scanf("%d)%d",&v,&w);
edge[n][v]=w;
}
for(i=0; i<nc; i++)
{
while(getchar()!='(');
scanf("%d)%d",&u,&w);
edge[u][n+1]=w;
}
int a,flow=0;
while(bfs())
{
while(a=dfs(n,inf))
{
flow+=a;
}
}
printf("%d\n",flow);
}
}
/*************************************************************************
> File Name: PowerN.cpp
> Author: _nplus
> Mail: jun18753370216@gmail.com
> Time: 2014年07月19日 星期六 09时30分23秒
************************************************************************/ #include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
#define inf 99999999
#define N 510
#define M N*N
using namespace std;
int edge[N][N],pre[N],a[N],n,m,nc,np,flow;
void ek()
{
while(1)
{
queue<int >Q;
Q.push(n);
memset(pre,-1,sizeof(pre));
memset(a,0,sizeof(a));
a[n]=inf;
pre[n]=n;
while(!Q.empty())
{
int u=Q.front();
Q.pop();
for(int v=0;v<=n+1;v++)
{
if(edge[u][v]&&!a[v])
{
pre[v]=u;
a[v]=min(a[u],edge[u][v]);
Q.push(v);
}
}
if(a[n+1])break;
}
if(!a[n+1])break;
for(int u=n+1;u!=n;u=pre[u])
{
edge[pre[u]][u]-=a[n+1];
edge[u][pre[u]]+=a[n+1];
}
flow+=a[n+1];
}
}
int main()
{
int i,j,u,v,w;
while(~scanf("%d%d%d%d",&n,&np,&nc,&m))
{
memset(edge,0,sizeof(edge));
for(i=0; i<m; i++)
{
while(getchar()!='(');
scanf("%d,%d)%d",&u,&v,&w);
edge[u][v]=w;
}
for(i=0; i<np; i++)
{
while(getchar()!='(');
scanf("%d)%d",&v,&w);
edge[n][v]=w;
}
for(i=0; i<nc; i++)
{
while(getchar()!='(');
scanf("%d)%d",&u,&w);
edge[u][n+1]=w;
}
int a;
flow=0;
ek();
printf("%d\n",flow);
}
}
Time Limit: 2000MS | Memory Limit: 32768K | |
Total Submissions: 22571 | Accepted: 11819 |
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.
Source
POJ训练计划1459_Power Network(网络流最大流/Dinic)的更多相关文章
- POJ 1459 Power Network(网络流 最大流 多起点,多汇点)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 22987 Accepted: 12039 D ...
- [讲解]网络流最大流dinic算法
网络流最大流算法dinic ps:本文章不适合萌新,我写这个主要是为了复习一些细节,概念介绍比较模糊,建议多刷题去理解 例题:codevs草地排水,方格取数 [抒情一下] 虽然老师说这个多半不考,但是 ...
- Power Network(网络流最大流 & dinic算法 + 优化)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24019 Accepted: 12540 D ...
- POJ 1459 Power Network(网络最大流,dinic算法模板题)
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数. 接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...
- POJ 1459 && ZOJ 1734--Power Network【最大流dinic】
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 25108 Accepted: 13077 D ...
- POJ 3469.Dual Core CPU 最大流dinic算法模板
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 24830 Accepted: 10756 ...
- 网络流最大流——dinic算法
前言 网络流问题是一个很深奥的问题,对应也有许多很优秀的算法.但是本文只会讲述dinic算法 最近写了好多网络流的题目,想想看还是写一篇来总结一下网络流和dinic算法以免以后自己忘了... 网络流问 ...
- poj 1273 Drainage Ditches (网络流 最大流)
网络流模板题. ============================================================================================ ...
- POJ1459 Power Network 网络流 最大流
原文链接http://www.cnblogs.com/zhouzhendong/p/8326021.html 题目传送门 - POJ1459 题意概括 多组数据. 对于每一组数据,首先一个数n,表示有 ...
随机推荐
- SQL Server 查看一个表上的索引
方法:1 sys.indexes index_id =0:堆 index_id =1:聚集索引 index_id =2.....:非聚集索引 ----------------------------- ...
- oracle正则表达式regexp_like的用法详解
oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...
- alois
Background It's not simple to know what happens in a bigger network. There's a multitude of applicat ...
- otl库(以前不知道有这个库,并且还可以在Unix下使用)
OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例 ...
- C++ 栈的实现
#ifndef _STACK_H #define _STACK_H #pragma once template< class T >class Stack{public: Stack( v ...
- 多个target下编译的时候出错问题的解决
在工程里如果有多个target的时候,如图 那么编译的时候一定要注意Xcode右侧勾选了正确的target,否则有可能会导致一系列让你想不到的bug. ,另外,如果工程中有framework,那么一定 ...
- 小Y的难题
Font Size:Aa Aa Aa Description 近期小Y迷上了数学,总是在思考各种数学问题.有一天,他不小心把墨水洒在草稿纸上.他如今能看到的是"2?3?1?4"(? ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...
- (转)Web开发中最致命的小错误
Web开发中最致命的小错误 现在,有越来越多所谓的“教程”来帮助我们提高网站的易用性.本文收集了一些在 Web 开发中容易出错和被忽略的小问题,并且提供了参考的解决方案,以便于帮助 Web 开发者更好 ...
- 如何在MFC对话框之间自定义消息传递
在MFC项目开发中,涉及到不同模块间数据信息的传递,如用户在登录界面成功登录后向系统管理模块发送用户名和密码等信息. 首先,需明确以下两点: 谁要发送这个消息--消息发送方 谁要接受这个消息--消息接 ...