传送门1
传送门2
写在前面:五一已过,五四示威
思路:分层建图,其实可以联想星际转移问题,把m个修车人拆成n*m个点,对于同一个修车人来说,他的第i个点就是说负责了第n-i+1个修车任务(车的编号不一定是n-i+1)
(以下来自Yveh’s blog)

这样从源连到这n*m个点,容量为1费用为0

后面n个点(表示b辆车)连到汇点,容量为1费用为0

n*m个工人与n辆车互相连接,容量为1,费用为cost[第i个工人][第j辆车]*k(k表示这是修的倒数第几辆车)

考虑修任意一辆车,影响的只能是在它后面修的车(和他本身),所以它后面的车每辆都要多花的时间,就是这辆车的维修时间,所以要*k。

注意:n,m的顺序注意啊!小心数组越界
代码:

#include<bits/stdc++.h>
#define inf 0x7fffff
using namespace std;
int m,n,tot=1,s,t,ans;
int up[1000],dis[1000],first[1000],a[65][10];
bool vis[1000];
struct edge
{int u,v,w,next,cost;
}e[150000];
queue<int>q;
void add(int x,int y,int z,int c){e[++tot]=(edge){x,y,z,first[x],c};first[x]=tot;}
bool spfa()
{memset(dis,63,sizeof(dis));q.push(s);dis[s]=0;while (!q.empty()){int k=q.front();q.pop();vis[k]=0;for (int i=first[k];i;i=e[i].next)if (e[i].w&&dis[e[i].v]>dis[k]+e[i].cost){up[e[i].v]=i;dis[e[i].v]=dis[k]+e[i].cost;if (!vis[e[i].v]) vis[e[i].v]=1,q.push(e[i].v);}}return dis[t]<inf;
}
void flow()
{int minn=inf;for (int i=up[t];i;i=up[e[i].u])minn=min(minn,e[i].w);for(int i=up[t];i;i=up[e[i].u])ans+=minn*e[i].cost,e[i].w-=minn,e[i^1].w+=minn;
}
main()
{scanf("%d%d",&m,&n);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++) scanf("%d",a[i]+j);t=n*m+n+1;for (int i=1;i<=n*m;i++) add(s,i,1,0),add(i,s,0,0);for (int i=1;i<=n;i++) add(i+n*m,t,1,0),add(t,i+n*m,0,0);for (int i=1;i<=m;i++)for (int j=1;j<=n;j++)for (int k=1;k<=n;k++)add((j-1)*m+i,n*m+k,1,j*a[k][i]),add(n*m+k,(j-1)*m+i,0,-j*a[k][i]);while (spfa()) flow();printf("%.2lf",(double)ans/n);
}

【BZOJ1070】【codevs2436】修车,费用流相关推荐

  1. bzoj1070: [SCOI2007]修车-费用流

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...

  2. bzoj1070 [SCOI2007]修车 费用流+拆分

    这个题一开始容易想到最暴力的建法,由于前面的决策影响后面的人的等待时间,所以就枚举第几个选第几辆, 由于有后面受前面影响,所以也可以看成前面对后面影响,影响的最多n个,所以就枚举影响建图,由于3辆车 ...

  3. P2053 SCOI2007 修车,费用流好题

    修车 题目链接 https://www.luogu.org/problemnew/show/P2053 题解 每个人每次只能修一辆车,且这个人修的最后一辆车所花时间为111倍的修这辆车的时间,修倒数第 ...

  4. [费用流]洛谷 P2053 修车(zkw费用流模版)

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  5. 修车——网络流——费用流

    这题很明显的是费用流了,关键是在于建图.其实,网络流的关键也是难点就在于建图. n个师傅,m个车-- 根据题意,需要把每个师傅拆成m个点,每辆车再向这些点连接,再来个超级源点S,超级汇点T即可. 代码 ...

  6. bzoj1070: [SCOI2007]修车 网络流

    bzoj1070: [SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的 ...

  7. [NOI2012]美食节——费用流(带权二分图匹配)+动态加边

    题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...

  8. [BZOJ2879][Noi2012]美食节(费用流)

    Address 洛谷P2050 BZOJ2879 LOJ#2674 Solution 一看发现和 SCOI2007 修车 是一样的. 这里再说一下建图: 把每个厨师拆成 ∑ i = 1 n p i \ ...

  9. [NOI2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

  10. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

最新文章

  1. 详解PyTorch中的ModuleList和Sequential
  2. RDKit | 基于RDKit的SMILES转canonical SMILES
  3. 求数组当中子数组最大和
  4. ceph pg_num 数值计算
  5. 【NOI online 2】游戏【二项式反演】【树上背包】
  6. (选择 冒泡 插入 二分 异或)
  7. linux后台不挂断运行 nohup命令
  8. java 集合操作工具包_java之操作集合的工具类--Collections
  9. cdh maven仓库地址
  10. 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd和YYYY-mm-dd HH:mm:ss...
  11. 自学Android到什么程度才能找到工作?
  12. HTTP和HTTPS有什么区别? 什么是SSL证书?使用ssl证书优势?
  13. javascript 实现页面加载完再显示页面
  14. 一步一步学Silverlight 2系列(15):数据与通信之ASMX
  15. 信息论与编码冯桂周林著答案_信息论与编码技术+(冯桂+林其伟+陈东华+著)+清华大学出版社+课后答案.pdf...
  16. 轻松办公信息化 六大OA产品优劣点评
  17. 机器学习算法工程师--实习面经
  18. BDrate、BDBR、BDPSNR的计算原理和程序
  19. Android实现欢迎界面
  20. 浅析栈指针ESP和帧指针EBP

热门文章

  1. javascript基础修炼——手把手教你造一个简易的require.js
  2. C语言答案杨崇艳,贯彻落实科学发展观,走新型工业化道路的要求是()。A.科技含量高B.经济效益好...
  3. child计算机英语作文,范文:The One-Child Family
  4. python基本语法 关于雷达模拟实践
  5. M1Mac使用TensorFlow出现AttributeError: ‘h5py.h5t.TypeID‘ object has no attribute ‘set_fields‘的解决办法
  6. 如何选择bfs和dfs
  7. 从零开始学Pytorch(十一)之ModernRNN
  8. python3 super_python3的super详解
  9. A-Deeper-Understanding-of-Spark-Internals(Spark内核深入理解)
  10. ES6_let和const_note