P2604 [ZJOI2010]网络扩容
思路
简单的费用流问题,跑出第一问后在残量网络上加边求最小费用即可
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 4000;
const int MAXM = 10000;
const int INF = 0x3f3f3f3f;
struct Edge{int u,v,cap,cost,flow;
};
struct data{int u,v,c,w;
}E[MAXM];
int s,t,n,m,k;
vector<Edge> edges;
vector<int> G[MAXN];
void addedge(int u,int v,int cap,int cost){edges.push_back((Edge){u,v,cap,cost,0});edges.push_back((Edge){v,u,0,-cost,0});int cnt=edges.size();G[u].push_back(cnt-2);G[v].push_back(cnt-1);
}
int a[MAXN],d[MAXN],p[MAXN],vis[MAXN];
queue<int> q;
bool SPFA(int &flow,int &cost){memset(d,0x3f,sizeof(d));memset(p,0,sizeof(p));q.push(s);vis[s]=true;a[s]=INF;d[s]=0;while(!q.empty()){int x=q.front();q.pop();vis[x]=false;for(int i=0;i<G[x].size();i++){Edge &e = edges[G[x][i]];if(e.cap>e.flow&&d[x]+e.cost<d[e.v]){d[e.v]=d[x]+e.cost;a[e.v]=min(a[x],e.cap-e.flow);p[e.v]=G[x][i];if(!vis[e.v]){vis[e.v]=true;q.push(e.v);}}}}if(d[t]==INF)return false;cost+=d[t]*a[t];flow+=a[t];for(int i=t;i!=s;i=edges[p[i]].u){edges[p[i]].flow+=a[t];edges[p[i]^1].flow-=a[t];}return true;
}
void MCMF(int &flow,int &cost){flow=0,cost=0;while(SPFA(flow,cost));
}
int main(){scanf("%d %d %d",&n,&m,&k);s=1,t=n;for(int i=1;i<=m;i++){scanf("%d %d %d %d",&E[i].u,&E[i].v,&E[i].c,&E[i].w);addedge(E[i].u,E[i].v,E[i].c,0);}int flow=0,cost=0;MCMF(flow,cost);printf("%d ",flow);s=MAXN-2;addedge(s,1,k,0);for(int i=1;i<=m;i++){addedge(E[i].u,E[i].v,INF,E[i].w);}MCMF(flow,cost);printf("%d\n",cost);return 0;
}
转载于:https://www.cnblogs.com/dreagonm/p/10493290.html
P2604 [ZJOI2010]网络扩容相关推荐
- P2604 ZJOI2010 网络扩容,费用流裸题
网络扩容 题目链接 https://www.luogu.org/problemnew/show/P2604 题解 对于每条边u→vu \rightarrow vu→v,我们将按照容量=C=C=C,费用 ...
- BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流)
题目连接: (luogu) https://www.luogu.org/problemnew/show/P2604 (bzoj) https://www.lydsy.com/JudgeOnline/p ...
- [ZJOI2010]网络扩容[网络流24题]
[ZJOI2010]网络扩容[网络流24题] 题意: 给定一张有向图,每条边都有一个容量 c 和一个扩容费用 w.这里扩容费用是指将容量扩大 1 所需的费用.求: 在不扩容的情况下,1 到 n 的最大 ...
- [ZJOI2010]网络扩容
Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: 2.将1到N的最大流增加K所需的最 ...
- bzoj1834: [ZJOI2010]network 网络扩容
努力看了很久样例一直过不了...然后各种输出中间过程啊巴拉巴拉弄了1h,没办法了...然后突然想到啊原来的边可以用啊为什么不用...于是A了...感人肺腑 #include<cstdio> ...
- [BZOJ 1834] [ZJOI2010]network 网络扩容
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一个扩 ...
- [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3330 Solved: 1739 [Subm ...
- 网络工程师成长日记383-某银行某市中心支行市县网络扩容项目工程感想
网络工程师成长日记383-某银行某市中心支行市县网络扩容项目工程感想 这是我的第383篇原创文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 某银行某市中心支行市县网络扩容项目工程感想 接到老 ...
- 【BZOJ】1834: [ZJOI2010]network 网络扩容(最大流+费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...
最新文章
- C++:多线程中的小白(1)基础概念
- 【组队学习】【35期】SQL编程语言
- 理论经典:TCP协议的3次握手与4次挥手过程详解
- 网络营销外包——网络营销外包专员如何帮助企业挑选网站建设类型
- android官方架构room,Android 官方架构组件介绍之 Room(翻译)
- OpenCV基本的SIMD的实例(附完整代码)
- http 长连接 短连接
- 【转】代码里的命名规则:错误的和正确的对比
- 计算机中Git配置环境变量 - 教程篇
- [LINUX] 误删了/lib 怎么办?
- 广东省计算机应用专业综合理论知识,(计算机应用技术专业综合理论考试说明.doc...
- 检查库文件的rpath命令
- oracle是什么数据库管理系统,数据库管理系统
- Java实现 LeetCode 383 赎金信
- Arthas线上代码诊断神器-定位问题
- 一文看懂国内人工智能行业产业链全景(必收藏)
- 【积水成渊-逐步定制自己的Emacs神器】1:Emacs入门
- networkx笔记
- android实现简单弹幕
- 路径跟踪算法之PID路径跟踪与PP跟踪