一开始从客人角度想的,怎么建都不对

从一个修车工所接待的所有顾客花费的总时间来看,设一共有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;
}

最新文章

  1. JDK安装,环境配置
  2. PHPCMS后台登陆路径修改方法(V9版)
  3. dom事件不求甚解,色解事件捕获和冒泡
  4. MongoDB 快速入门--中级
  5. bzoj1070
  6. 将java源码打成jar包
  7. 容易上手-类似ERP系统 简单特效
  8. 10大支持移动“触摸操作”的JavaScript框架
  9. iOS WebView你需要的问题答案
  10. Python中range()和len()
  11. Flyway数据表迁移框架的使用
  12. activity 运行流程图
  13. linux下使用软连接之案例二
  14. Android异步载入学习笔记之四:利用缓存优化网络载入图片及ListView载入优化
  15. TOMCAT添加管理用户认证
  16. mysql 一次性插入上万条数据测试专用
  17. 【洛谷】P1052 过河(状压dp)
  18. Jenkins安装 CentOS 7上安装Jenkins
  19. DataV纪录
  20. hdu 4278 Faulty Odometer(进制转换)

热门文章

  1. Topcoder 658Div2
  2. MySQL注释(转)
  3. 无线网卡与本地连接不能同时使用&amp;一机多网络的优先级设置
  4. asp.net core 集成JWT(一)
  5. Md5扩展攻击的原理和应用
  6. antd 离线 icon
  7. CF 234 C Weather(粗暴方法)
  8. 16款创建CSS3动画的jQuery插件
  9. What to do about Eclipse&#39;s “No repository found containing: …” error messages?
  10. 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证