题目链接:

https://www.luogu.com.cn/problem/P2053

思路参考博客:

https://www.luogu.com.cn/blog/a23333/solution-p2053

算法:1:最小费用最大流 Dinic+Spfa

图解:

思路:

1:费用流+拆点

2:首先如果一个工人只能维修一辆车,那么就是个裸的二分图带权匹配了。可惜一个工人可以维修多辆车。可以看到 n 比较大( ≤60 ), m比较小( ≤9 )。数据范围提示我们可以把 m个点拆成n个点

3:具体怎么拆:第 x号工人,拆成 x1,x2,x3...xn 共n个工人。然后客户向每个工人连边。如果该工人维修该客户需要 a 元,则向 xi​ 连一条流量为 1,边权为 i∗a 的边

4:解释:如果客户 A最终选择了 x2 这个工人,肯定会有别的客户 B 向 x1​ 匹配。相当于让客户 A 先和 x 工人匹配,再让 B 匹配,所以答案加上了两倍的 x 修 A 的时间:修A,A等了一个修A的时间,因为B也要x这个工人修,因此B在x修A的时候也在等候,等候一个修A的时间

代码:

#include <bits/stdc++.h>using namespace std;
//const int maxn=1e4+10,maxm=1e5+10;
const int maxn=6e2+2,maxm=6e4+6e3+1;
int m,n,s,t,a,tot=1,head[maxn],dis[maxn],flow[maxn],pre[maxn],last[maxn],maxflow,mincost;
bool vis[maxn];
queue<int>q;struct edge
{int to,next,w,dis;
}e[maxm];void addedge(int x,int y,int w,int dis)
{e[++tot].to=y;e[tot].w=w;e[tot].dis=dis;e[tot].next=head[x];head[x]=tot;
}bool spfa(int s,int t)
{memset(dis,0x7f,sizeof(dis));memset(flow,0x7f,sizeof(flow));memset(vis,0,sizeof(vis));q.push(s);vis[s]=1;dis[s]=0;pre[t]=-1;while(!q.empty()){int now=q.front();q.pop();vis[now]=0;for(int i=head[now];i!=-1;i=e[i].next){int y=e[i].to;if(e[i].w>0&&dis[y]>dis[now]+e[i].dis){dis[y]=dis[now]+e[i].dis;pre[y]=now;last[y]=i;flow[y]=min(flow[now],e[i].w);if(!vis[y]){q.push(y);vis[y]=1;}}}}return pre[t]!=-1;
}void dfs()
{int now=t;maxflow+=flow[t];mincost+=flow[t]*dis[t];while(now!=s){e[last[now]].w-=flow[t];e[last[now]^1].w+=flow[t];now=pre[now];}
}int main()
{ios::sync_with_stdio(0);scanf("%d %d",&m,&n);s=0,t=m*n+n+1;memset(head,-1,sizeof(head));for(int i=1;i<=m*n;i++)addedge(i+n,t,1,0),addedge(t,i+n,0,0);for(int i=1;i<=n;i++)addedge(s,i,1,0),addedge(i,s,0,0);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a);for(int k=1;k<=n;k++){addedge(i,n*j+k,1,k*a),addedge(n*j+k,i,0,-k*a);}}while(spfa(s,t))dfs();printf("%.2lf\n",1.0*mincost/n);return 0;
}

洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa相关推荐

  1. 洛谷 - P4016 负载平衡问题(最小费用最大流)

    题目链接:点击查看 题目大意:有n个仓库分布在一个环形的区域,现在每个仓库可以与相邻的两个仓库转移货物,问最少需要操作多少次才能让每个仓库的货物都达到平衡 题目分析:达到平衡的意思其实就是都等于平均值 ...

  2. 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)

    题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...

  3. bzoj 1070: [SCOI2007]修车【最小费用最大流】

    一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...

  4. 洛谷 P3381 【模板】最小费用最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数\(N.M.S.T\) ...

  5. 洛谷 3381 【模板】最小费用最大流

    https://www.luogu.org/problem/show?pid=3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流 ...

  6. 洛谷 - P3980 [NOI2008]志愿者招募(最小费用最大流+思维建边)

    题目链接:点击查看 题目大意:现在有n天需要志愿者,每一天需要招募的人数是Ai个人,现在有m类志愿者,每类志愿者可以在[l,r]天内被招募,需要花费的代价为Ci,现在需要安排一种招募方式,可以使得总花 ...

  7. 洛谷P3381 【模板】最小费用最大流

    传送门 费用流板子 细节真多--一个边的flow和点的flow分不清--还有往回减流的时候应该减去flow[t]-- 1 //minamoto 2 #include<iostream> 3 ...

  8. 网络流----最小费用最大流(EK+SPFA)

    先来介绍一下什么是费用流(部分内容参考bilibili董晓算法) 给定一个网络G=(V,E),每条边有容量限制w(u,v),还有单位流量的费用c(u,v). 当(u,v)的流量为f(u,v)时,需要花 ...

  9. 网络流--最小费用最大流 (理解)

    1.什么是最小费用最大流问题 上篇文章我们讲解了最大流问题,那什么是最小费用最大流呢?听名字就可以看出,我们要在满足最大流的同时找到达成最大流的最小费用. 对于一个网络流,最大流是一定的,但是组成最大 ...

最新文章

  1. 使用python愉快地做高数线代题目~
  2. php二维数组对某一列进行数据组装
  3. c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
  4. 实现软件自动启动代码
  5. Debian部署postgresql并允许远程连接
  6. IT人员健康信号之颈椎病自疗
  7. Confluence 6 手动备份站点
  8. CSS3 动画插件 aos.js
  9. 风暴事件处理器–每个工作者的GC日志文件
  10. mac json格式化工具_简洁好用的工具都是相似的
  11. rr计算机专业英语,《计算机专业英语》电子教本8.pdf
  12. storm 出现一次运行结果,后续不在出现的原因
  13. 基于Xilinx Spartan-7 FPGA实现SMC接口
  14. 大型机 java_通过JCA错误进行Java大型机通信-连接不在事...
  15. cass读取dat文件_CASS里DTM法土方计算
  16. 怎么用小学生计算机玩游戏,小学生不应该玩电脑游戏作文
  17. JAVA将多个Pdf合并成一个Pdf
  18. 记一次 打包报错:Keystore was tampered with, or password was incorrect
  19. 微信公众平台昵称乱码emoji表情
  20. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

热门文章

  1. Oracle 中的四舍五入
  2. 如何使谷歌浏览器打开书签时新开标签页?
  3. 未能写入输出文件“c:\Windows\Microsoft.NET\Framework... AppCode.dll 拒绝访问
  4. Python 获取当前文件 当前目录 上级目录 上上级目录
  5. 正交调制原理(未完)
  6. 与 xcodebuild 命令有关的目录
  7. 算法:12306的余票算法。
  8. 百度游戏被爆裁员,百度不做游戏业务了?
  9. SpringBoot实战
  10. 解决问题: Error: command failed: npm install --loglevel error --legacy-peer-deps