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 ...
随机推荐
- atoi 实现
int atoi(const char *nptr); 把字符串转换成整型数.ASCII to integer 的缩写. 头文件: #include <stdlib.h> 参数nptr字符 ...
- svn不能更新也不能提交【svn A conflict in the working copy obstructs the current operation】
SVN不能提交解决方法: 最近发现了svn有一种特殊的冲突,跟svn版本库同步的时候,还提示代码没有不一样的,但是文件图标上又是一个特殊的冲突符号,不是那种大红的冲突符号.更新不了也 ...
- oracle创建用户,修改用户,删除用户等关于用户的
--直接修改底层表 USER$ 更换用户名 1.windows 平台下运行 cmd 2.sqlplus /nolog 3.SQL> conn SYSTEM/123@ORCL as sysdba ...
- 飞行器的Pitch Yaw Roll概念图解
前进方向为Z轴 Pitch 升降 绕X轴 对应常见Φ(phi)角: Yaw 偏航 绕Y轴 对应常见θ(theta)角: Roll 翻滚 绕Z轴 对应常见φ(psi)角: 对应表: 参考网址NASA: ...
- rtx信息泄漏利结合弱口令导致被批量社工思路
腾讯通RTX(Real Time eXchange)是腾讯公司推出的企业级实时通信平台. rtx server 存在暴露用户信息的漏洞,通过web访问 http://RtxServerIp:8012/ ...
- 内部技术分享的 PPT
本文的基础是搞了一次内部的技术分享,在此也分享一下本次的PPT的一些内容.先列一下大概内容吧. EF-Code First API(WCF.WebAPI) Xaml MVVM AOP Xamarin. ...
- Zend-MVC intro
Zend-MVC intro Zend MVC层建立在servicemanager.eventmanager.http.stdlib.几个组件之上.相关组件介绍会在其他文章中详细说明. 除了以上4大组 ...
- DBus通讯
linux下进程间通信的方式主要有Pipe(管道),FIFO(命名管道),信号,共享内存,消息队列,信号灯等,这些方式各有 各得特点,如管道是linux下命令行中常用的,用于父子进程的通信.但是这些通 ...
- constructor(构造器)
当我们创建一个类的时候,如果不自定义构造器,则系统会自动创建一个默认的构造器,也是一个无参构造器用于初始化. 当我们在类的里面创建了自己的构造器,则系统将不会创建默认的构造器,由于需求条件不同,构造器 ...
- std::function赋值的几种方法
定义: #include <functional> std::function<void(const QString&)> myPrintFunction; 函数指针 ...