博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
负载平衡问题(费用流)
阅读量:5942 次
发布时间:2019-06-19

本文共 2120 字,大约阅读时间需要 7 分钟。

//http://www.cnblogs.com/IMGavin/#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;#define gets(A) fgets(A, 1e8, stdin)const int INF = 0x3F3F3F3F, N = 1008, MOD = 1003, M = 100000;int a[N];const double EPS = 1e-6;struct Node{ int u, v, cap, cost; int next;}edge[M];//有向图,u到v的容量,费用int tot;int head[N], pre[N], path[N], dis[N];bool inq[N];void init(){ tot = 0; memset(head, -1, sizeof(head));}void add(int u, int v, int cap, int cost){ edge[tot].u = u; edge[tot].v = v; edge[tot].cap = cap; edge[tot].cost = cost; edge[tot].next = head[u]; head[u] = tot++; edge[tot].u = v; edge[tot].v = u; edge[tot].cap = 0; edge[tot].cost = -cost; edge[tot].next = head[v]; head[v] = tot++;}bool SPFA(int st, int des){//计算最小费用 memset(inq, 0, sizeof(inq)); memset(dis, 0x3f, sizeof(dis)); queue
q; q.push(st); dis[st] = 0; inq[st] = true; while(!q.empty()){ int u = q.front(); q.pop(); inq[u] = false; for(int i = head[u]; ~i; i = edge[i].next){ int v = edge[i].v; if(edge[i].cap > 0 && dis[v] > dis[u] + edge[i].cost){ dis[v] = dis[u] + edge[i].cost; pre[v] = u; path[v] = i; if(!inq[v]){ inq[v] = true; q.push(v); } } } } return dis[des] < INF;}int EdmondsKarp(int st, int des){//最小费用最大流 int mincost = 0, flow = 0;//最小费用与流量 while(SPFA(st, des)){ int f = INF; for(int i = des; i != st; i = pre[i]){ if(f > edge[path[i]].cap){ f = edge[path[i]].cap; } } for(int i = des; i != st; i = pre[i]){ edge[path[i]].cap -= f; edge[path[i]^1].cap += f; } mincost += f * dis[des]; flow += f; } return mincost;}int main(){ int n; while(cin >> n){ int st = 0, des = n + 1; int sum = 0; for(int i = 1; i <= n; i++){ cin >> a[i]; sum += a[i]; } init(); sum /= n; for(int i = 1; i <= n; i++){ if(a[i] < sum){ add(st, i, sum - a[i], 0); }else{ add(i, des, a[i] - sum, 0); } add(i, i % n + 1, INF, 1); add(i, (i - 2 + n) % n + 1, INF, 1); } printf("%d\n", EdmondsKarp(st, des)); } return 0;}

  

转载于:https://www.cnblogs.com/IMGavin/p/6411447.html

你可能感兴趣的文章
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>
2015年第21本:万万没想到,用理工科思维理解世界
查看>>
大家谈谈公司里的项目经理角色及职责都是干什么的?
查看>>
剑指offer
查看>>
Velocity魔法堂系列二:VTL语法详解
查看>>
NopCommerce架构分析之八------多语言
查看>>
转:Eclipse自动补全功能轻松设置
查看>>
ES6新特性:Javascript中的Reflect对象
查看>>
hibernate逆向工程生成的实体映射需要修改
查看>>
mysql update操作
查看>>
Robots.txt - 禁止爬虫(转)
查看>>
MySQL数据库
查看>>