一开始从客人角度想的,怎么建都不对
从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2…以此类推。所以把第i个修车工拆成n组m个,第j组表示i修车工修第j个顾客的车,第j组第k个表示i修车工修第(n-k+1)个修第j个顾客的车,所以产生的费用是a[i][j]*k,所以对于每个(i,j,k),连接(i,(j-1)*n+k,1,k*a[i][j])。
然后s向所有顾客连接流量1费用0的边,所有拆掉的修车工向t连接流量1费用0的边。
跑最小费用最大流即可。

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1000005,inf=1e9;
int n,m,h[N],cnt=1,dis[N],fr[N],ans,s,t,a[65][65],id[65][65],tot;
bool v[N];
struct qwe
{int ne,no,to,va,c;
}e[N<<2];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void add(int u,int v,int w,int c)
{cnt++;e[cnt].ne=h[u];e[cnt].no=u;e[cnt].to=v;e[cnt].va=w;e[cnt].c=c;h[u]=cnt;
}
void ins(int u,int v,int w,int c)
{//cout<<u<<" "<<v<<" "<<w<<endl;add(u,v,w,c);add(v,u,0,-c);
}
bool spfa()
{queue<int>q;for(int i=s;i<=t;i++)dis[i]=inf;dis[s]=0;v[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();v[u]=0;for(int i=h[u];i;i=e[i].ne)if(e[i].va>0&&dis[e[i].to]>dis[u]+e[i].c){dis[e[i].to]=dis[u]+e[i].c;fr[e[i].to]=i;if(!v[e[i].to]){v[e[i].to]=1;q.push(e[i].to);}}}return dis[t]!=inf;
}
void mcf()
{//cout<<"OK"<<endl;int x=inf;for(int i=fr[t];i;i=fr[e[i].no])x=min(x,e[i].va);for(int i=fr[t];i;i=fr[e[i].no]){e[i].va-=x;e[i^1].va+=x;ans+=x*e[i].c;}
}
int main()
{m=read(),n=read();s=0,t=m*n+n+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){a[i][j]=read();for(int k=1;k<=n;k++)ins(i+n*m,(j-1)*n+k,1,k*a[i][j]);}for(int i=1;i<=n;i++)ins(s,i+n*m,1,0);for(int i=1;i<=n*m;i++)ins(i,t,1,0);while(spfa())mcf();printf("%.2lf\n",(double)ans/(double)m);return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/8443181.html

bzoj 1070: [SCOI2007]修车【最小费用最大流】相关推荐

  1. BZOJ 1070: [SCOI2007]修车(最小费用最大流)

    建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...

  2. [BZOJ 1070][SCOI2007]修车(费用流)

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

  3. BZOJ 1070: [SCOI2007]修车(费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...

  4. BZOJ 1070: [SCOI2007]修车

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

  5. BZOJ 2597 剪刀石头布(最小费用最大流)(WC2007)

    Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道 ...

  6. 修车-最小费用最大流

    题目描述 得到一个教训:不要妄想在网络流里面在线修改什么东西:在一开始建模的时候,就应该吧所有的可能考虑进去. #include<cstdio> #include<cstring&g ...

  7. 洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa

    题目链接: https://www.luogu.com.cn/problem/P2053 思路参考博客: https://www.luogu.com.cn/blog/a23333/solution-p ...

  8. [SCOI2007]修车,洛谷P2053,最小费用最大流

    正题 给出m个师傅,n台车,并给出每个师傅各个车的时间,现在要使得,n辆车一起来,等待时间最短. 我们来观察一个师傅所消耗的等待时间.m个师傅所消耗的总等待时间就是车主的总等待时间. 对于第a个师傅, ...

  9. 【BZOJ】1070: [SCOI2007]修车

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

最新文章

  1. 《程序员》2月精彩内容:互联网应用架构面面观
  2. windows 7下用SaveFileDialog弹不出对话框问题
  3. python 绘制围棋棋盘_围棋之规则基础(一)
  4. php操作带中文的json数据
  5. springboot 启动退出终端不停止
  6. 浅谈Time Elastic Band
  7. 公式写成matlab代码,大话遗传算法(含Matlab代码)
  8. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)
  9. MDC机制实现日志的链路追踪
  10. mysql语法检查工具_sql语法分析器(sql语法分析工具)
  11. python 今日头条视频自动上传_抖音视频怎么上传到今日头条?这个软件可一键操作很方便...
  12. 如何自定义快捷方式图标为自己的图片(保姆级教程)
  13. [ISITDTU 2019]EasyPHP
  14. js查找数组元素位置
  15. hdwiki 框架简介
  16. logo制作软件 Ai怎么设计创意LOGO
  17. java多态app_Java 入门教程 - Java 多态 - IT学院 - 中国软件协会智能应用服务分会...
  18. Python笔记: 执行run.py文件
  19. Unity3D使用Animation编辑器编辑动画
  20. 将图片做成gif动态图

热门文章

  1. HTTP家族详细讲解
  2. linux openssh升级7.4,RHEL Centos上升级OpenSSH7.4p1
  3. java重绘table_java – 与JTable交互,使用新行快速更新
  4. 一个x86平台的spi flash驱动移植笔记
  5. k近邻法的实现(kd树)-相关问题梳理
  6. oracle雇主联盟官网,ocm联盟线下分享会圆满结束!
  7. 【java】java 分支预测 Java处理排序后的数组比没有排序的快
  8. 【Flink】FLink assigned slot xx was removed
  9. 95-40-150-java.util.concurrent-ExecutorCompletionService
  10. 【Elasticsearch】Elasticsearch 索引 索引模板 生命周期 关系