POJ 1459 Power Network(网络最大流,dinic算法模板题)
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数。
接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z;np个数据(u)z,表示发电站的序号,以及最大的发电量;
nc个数据(u)z,表示用电厂的序号,以及最大的用电量。
最后让你求可以供整个网络使用的最大电力。
思路:纯模板题。
这里主要是设一个源点s和一个汇点t,s与所有发电厂相连,边的最大容量为对应发电厂的最大发电量;
t与所有用电厂相连,边的最大容量为对应用电厂的最大用电量。
因为节点编号0~n-1,所以这里s设为n,t设为n+1。
接着求最大流即可。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue> using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=;
int pri[maxn]; //用来记录增广路
int n,np,nc,m; //n为节点数,np为发电站数,nc为用电厂数,m为边的个数。
int s,t,sum; //源点,汇点,最大流
struct Edge{
int c,f; //c为容量,f为流
}edge[maxn][maxn];
bool BFS() {
queue<int> q;
memset(pri,,sizeof(pri));
pri[s]=;
q.push(s);
while(!q.empty()) {
int temp=q.front();
q.pop();
for(int i=; i<=n+; i++) {
if(!pri[i] && edge[temp][i].c-edge[temp][i].f){
pri[i]=pri[temp]+;
if(i==t)
return true; //即如果可以流到汇点,直接return true
q.push(i);
}
}
}
return false;
} //p表示当前节点,flow表示该节点通过的流量
int dinic(int p,int flow){
if(p==t){
return flow;
}
int f=flow;
for(int i=;i<=n+;i++){
if(pri[i]==pri[p]+ && edge[p][i].c-edge[p][i].f){
int a=edge[p][i].c-edge[p][i].f; //a为该边可以增加的流量
int ff=dinic(i,min(a,flow)); //ff为路径中所有a的最小值,即为该条路中可以增加的流量
edge[p][i].f+=ff; //正向边
edge[i][p].f-=ff; //逆向边,逆向边的c为0,f为负值,这样c-f即为正向边的目前流量,即可以“退流”的量
flow-=ff;
}
}
return f-flow;
}
int main()
{
int u,v,z;
while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF){
sum=;
s=n;t=n+;
for(int i=;i<maxn;i++){
for(int j=;j<maxn;j++)
edge[i][j].c=edge[i][j].f=;
}
for(int i=;i<=m;i++){
while(getchar()!='('); //要加上这句。
scanf("%d,%d)%d",&u,&v,&z);
//printf("%d %d %d\n",u,v,z);
edge[u][v].c=z;
}
for(int i=;i<np;i++){
while(getchar()!='(');
scanf("%d)%d",&u,&z);
//printf("%d %d\n",u,z);
edge[s][u].c=z;
}
for(int i=;i<nc;i++){
while(getchar()!='(');
scanf("%d)%d",&u,&z);
//printf("%d %d\n",u,z);
edge[u][t].c=z;
}
//如能找到增广路,则sum加上增加的流量
while(BFS()){
sum+=dinic(s,INF);
}
printf("%d\n",sum);
}
return ;
}
POJ 1459 Power Network(网络最大流,dinic算法模板题)的更多相关文章
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- POJ - 1459 Power Network(最大流)(模板)
1.看了好久,囧. n个节点,np个源点,nc个汇点,m条边(对应代码中即节点u 到节点v 的最大流量为z) 求所有汇点的最大流. 2.多个源点,多个汇点的最大流. 建立一个超级源点.一个超级汇点,然 ...
- POJ 1459 Power Network(网络流 最大流 多起点,多汇点)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 22987 Accepted: 12039 D ...
- POJ 3469.Dual Core CPU 最大流dinic算法模板
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 24830 Accepted: 10756 ...
- 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 ...
- P3376 【模板】网络最大流dinic算法
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- 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 ...
随机推荐
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- c语言 char*类型作为中间变量将许多字符串保存到一个数组的问题
char*是一个字符串指针,如下面的程序value_作为一个中间变量用来在for循环中scanf输入的值的接收者,然后将value_保存到array中,但是一下程序会出现一个问题就是当你跳出这个函数时 ...
- 3月3日(4) Remove Duplicates from Sorted List
原题 Remove Duplicates from Sorted List 有序单链表去重,delete 只能对指针起作用. /** * Definition for singly-linked li ...
- DataGridView导入导出excel
DataGridView导出到Excel #region 方法一 DateGridView导出到csv格式的Excel /// <summary> /// 导出数据到Excel.常用方法, ...
- ASP.NET中的常用快捷键
想查找ASP.NET中的属性快捷键,忘记了,搜了一下,找到了ASP.NET中的常用快捷键. 大神文章:http://www.cnblogs.com/xiacao/archive/2012/06/12/ ...
- Oracle bbed 实用示例-----File Header Reset
一.查看当前环境 1.1 当前控制文件中的SCN号 [oracle@ora10 ~]$ sqlplus /nolog SQL :: Copyright (c) , , Oracle. All righ ...
- Oracle 表的连接方式(2)-----HASH JOIN的基本机制2
Hash算法原理 对于什么是Hash算法原理?这个问题有点难度,不是很好说清楚,来做一个比喻吧:我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分 ...
- openerp学习笔记 计算字段、关联字段(7.0中非计算字段、关联字段只读时无法修改保存的问题暂未解决)
计算字段.关联字段,对象修改时自动变更保存(当 store=True 时),当 store=False 时,默认不支持过滤和分组7.0中非计算字段.关联字段只读时无法修改保存的问题暂未解决 示例代码: ...
- HDFS命令行操作
启动后可通过命令行使用hadoop. (1)所有命令 (先将$HADOOP_HOME/bin加入到.bashrc的$PATH变量中) [html] view plaincopy [hadoop@nod ...
- 【转载】MySQL查询阻塞语句
select r.trx_id waiting_trx_id, r.trx_mysql_thread_Id waiting_thread, r.trx_query waiting_que ...