题意

n个顾客m个服务员,给出每个服务员给每个顾客服务需要的时间,求顾客最小的等待时间

建图

网络流真是玄学啊,就是不会建图。。

  • 源点向每个客户连边,控制流量为n
  • 服务员拆点,每个客户向每个服务员连n条边,表示是该服务员倒数第k个服务的对象,代价为k*cost[i] [j]
  • 拆点后的服务员向汇点连边

因此每个服务员会先确定最后一个服务的对象

代码

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=a;i<b;i++)
#define debug(a) printf("a =: %d\n",a);
#define sc(x) scanf("%d",&x)
const int INF=0x3f3f3f3f;
const int maxn=500+50;
const int Mod=1000000007;
const double PI=acos(-1);
typedef long long ll;
typedef unsigned int ui;
using namespace std;struct Edge{int from,to,cap,flow,cost;Edge() {}Edge(int from, int to, int cap, int flow, int cost) : from(from), to(to), cap(cap), flow(flow), cost(cost) {}
};struct MCMF{int m;vector<Edge> edges;vector<int> G[maxn];int inq[maxn];int d[maxn];int p[maxn];int a[maxn];void init(int n){for(int i=0;i<=n;i++) G[i].clear();edges.clear();}void addEdge(int from,int to,int cap,int cost){edges.push_back(Edge(from,to,cap,0,cost));edges.push_back(Edge(to,from,0,0,-cost));m=edges.size();G[from].push_back(m-2);G[to].push_back(m-1);}bool spfa(int s,int t,int &flow,int &cost){mem(d,0x3f); mem(inq,0); mem(a,0);d[s]=0; inq[s]=1; p[s]=0; a[s]=INF;queue<int> qu;qu.push(s);while(!qu.empty()){int u=qu.front(); qu.pop();inq[u]=0;int sz=G[u].size();for(int i=0;i<sz;i++){Edge &edge=edges[G[u][i]];if(edge.cap>edge.flow && d[edge.to]>d[u]+edge.cost){d[edge.to]=d[u]+edge.cost;p[edge.to]=G[u][i];a[edge.to]=min(a[u],edge.cap-edge.flow);if(!inq[edge.to]){qu.push(edge.to);inq[edge.to]=1;}}}}if(d[t]==INF) return false;flow+=a[t];cost+=d[t]*a[t];int u=t;while(u!=s){edges[p[u]].flow+=a[t];edges[p[u]^1].flow-=a[t];u=edges[p[u]].from;}return true;}int minCost(int s,int t){int flow=0,cost=0;while(spfa(s,t,flow,cost));//cout<<"flow "<<flow<<endl;return cost;}
};int s[233][233];
MCMF mcmf;int main()
{
#ifndef ONLINE_JUDGE//freopen("/home/martin/ClionProjects/untitled/in.txt","r",stdin);//freopen("/home/martin/ClionProjects/untitled/out.txt","w",stdout);
#endifint T; scanf("%d",&T);for(int cs=1;cs<=T;cs++){int n,m;scanf("%d %d",&m,&n);//scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&s[i][j]);int N=1+n+n*m;mcmf.init(N+1);for(int i=1;i<=n;i++)mcmf.addEdge(0,i,1,0);for(int j=1;j<=m;j++)for(int i=1;i<=n;i++){for(int k=1;k<=n;k++){mcmf.addEdge(i,j*n+k,1,k*s[i][j]);}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)mcmf.addEdge(j*n+i,N,1,0);printf("%d\n",mcmf.minCost(0,N));//printf("Case #%d: %d\n",cs,mcmf.minCost(0,N));}return 0;
}

HDU5619 Jam's store(最小费用最大流 MCMF)相关推荐

  1. HDU 6445 Search for Answer(最小费用最大流-mcmf)

    Description 给出一个nnn个点的完全图的邻接矩阵aaa,其中ai,j=1a_{i,j}=1ai,j​=1表示i,ji,ji,j之间边的方向是iii到jjj,ai,j=0a_{i,j}=0a ...

  2. 最小费用最大流MCMF算法

    摘要 在复杂网络研究中,单源单点的最小费用最大流算法(以下简称MCMF)的应用十分广泛,也引申出类似预流推进.ZKW.SPFA等相关方法. 在华为2017CodeCraft中,MCMF可以说是各家实力 ...

  3. 最小费用最大流 【模板】

    如果理解了最大流连续增广路算法的思维, 理解这个算法还是很简单的. 结构体存储信息: 分别为边的起点.终点.容量.当前流量.费用.下一条边的编号. struct Edge {int from, to, ...

  4. POJ - 2516 Minimum Cost 最小费用最大流

    题目链接 题意:给n,m,k表示商店数,储存店数,种类数 然后给n*k表示每个水果店需求每种种类的数量: 表示成 need[i][j] 再给m*k表示每个储存店每种种类数量: 表示成store[i][ ...

  5. 最小费用最大流+(对最小费用最大流的理解)

    题目链接:https://cn.vjudge.net/contest/68128#problem/E 具体思路:图的建立方式, 超级源点 - >  供应商 - > 顾客 - > 超级 ...

  6. 乌鲁木齐网络赛J题(最小费用最大流模板)

    ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报  分类: 网络流(33)  版权声 ...

  7. pku The Windy's KM最小权匹配 or 最小费用最大流

    http://poj.org/problem?id=3686 题意: 给定n个玩具,有m个车间,给出每个玩具在每个车间的加工所需的时间mat[i][j]表示第i个玩具在第j个车间加工所需的时间,规顶只 ...

  8. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

  9. 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)

    题目链接 题目大意: 解题思路: 又是一道裸题 . 首先它要求第iii个点只经过ViViVi那么我们就拆点ai,ai+na_i,a_{i+n}ai​,ai+n​一个点为入点,一个为出点这条边的流量范围 ...

最新文章

  1. 083、Prometheus架构(2019-05-05 周日)
  2. 从疫情到求职寒冬,我的算法求职经历
  3. Java范例集锦(一)
  4. NetBpm 组织架构(4)
  5. 树莓派wiringPi库详解
  6. windows下kafka源码阅读环境搭建
  7. 睡眠音频分割及识别问题(九)--Android下的YAMNet
  8. 【2016年第5期】面向大规模图数据的并行图布局算法
  9. JAVA读取属性文件的几种方法
  10. java实践_java基础实践
  11. linux IPC socket(2)
  12. julia :谈循还,row 与 col who first?
  13. Python模拟用户自动登陆网易126邮箱
  14. 1.3版走迷宫小游戏(C++)
  15. 谁是史上最强-用爬虫分析IMDB TOP250电影数据
  16. macos 10.15 软件损坏/无法验证开发者
  17. 携创教育:2022学历改革解读系列|提升学历、迫在眉睫
  18. 在Word加载EndNote插件
  19. 支付业务与技术架构学习总结(2)——到底什么才是银行业务架构?
  20. tensorflow Variable already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUS

热门文章

  1. 安徽省2016“京胜杯”程序设计大赛_C_箭无虚发
  2. C++ 读取文件时报错“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方法
  3. M1 芯片打开软件提示:“XXXX” 因为出现问题而无法打开 怎么解决?
  4. Windows 10配置CUDA 9.2
  5. ubuntu设置宽带连接及wifi共享
  6. 计算机的未来无可限量英文,(整理笔记)Day86【BBC】无人驾驶5:无人驾驶已是大势所趋 The trend of driverless cars is unstoppable...
  7. 刷题日记-SQL 查找最晚入职员工的所有信息
  8. Premiere室内背景场景MG动画PR素材MOGRT Vol.2
  9. 2020 乐山师范学院新生程序设计大赛题解
  10. 【嵌入式学习-STM32F103-EXTI外部中断】