问题描述

LG2053

BZOJ1070


题解

将\(m\)个修理工拆为\(n \times m\)个,将修理工和车辆看做二分图,连出一个完全二分图。

边流量为\(1\),费用为时间,费用流即可。


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-'){
fh=-1;ch=getchar();
}
else fh=1;
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
x*=fh;
} const int maxn=63;
const int maxm=13;
const int INF=0x3f3f3f3f; int n,m;
int a[maxn][maxm]; int Head[100000],Next[1000000],to[1000000],tot=1,w[1000000],co[1000000];
int S,T; void add(int a,int b,int c,int d){
to[++tot]=b,Next[tot]=Head[a],Head[a]=tot,w[tot]=c,co[tot]=d;
} bool vis[100000];
int now[1000000],pre[1000000];
int dis[100000];
int ans,flow; bool spfa() {
memset(vis,0,sizeof(vis));memset(dis,0x3f,sizeof(dis));
queue<int>q;q.push(S);vis[S]=1;dis[S]=0;now[S]=INF;
while(!q.empty()){
int x=q.front();q.pop();vis[x]=0;
for (int i=Head[x];i;i=Next[i]){
int y=to[i],z=w[i],ww=co[i];
if (!z||dis[y]<=dis[x]+ww) continue;
dis[y]=dis[x]+ww;
now[y]=min(now[x],z);
pre[y]=i;
if(!vis[y]){
q.push(y);
vis[y] = 1;
}
}
}
return dis[T]!=INF;
} void upd(){
flow+=now[T],ans+=dis[T]*now[T];
int p=T;
while(p!=S){
int k=pre[p];
w[k]-=now[T],w[k xor 1]+=now[T];
p=to[k xor 1];
}
} int main(){
read(m);read(n);tot=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
read(a[i][j]);
}
}
S=n*(m+1)+1,T=S+1;
for(int i=1;i<=n*m;i++){
add(S,i,1,0);add(i,S,0,0);
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
int p=(i-1)*n+k;
add(p,j+n*m,1,a[j][i]*k);add(j+n*m,p,0,-a[j][i]*k);
}
}
}
for(int i=1;i<=n;i++){
add(n*m+i,T,1,0);add(T,n*m+i,0,0);
}
while(spfa())
upd();
double ret=(double)ans/(double)n*1.0;
cout<<fixed<<setprecision(2)<<ret<<endl;
return 0;
}

最新文章

  1. ModelDataExchange - Import
  2. Myeclipse启动报错: Invalid &#39;log4jConfigLocation&#39; parameter
  3. 学习linux内核时常碰到的汇编指令(1)
  4. WCF 服务器调用回调函数 单程-双程操作模式:(待补充Demo)
  5. Install Slax on USB device (Slax U 盘安装)
  6. NFC 与 Windows Phone 的那点事儿
  7. Oracle迁移MySQL笔记
  8. 【英语】Bingo口语笔记(36) - ʌn的发音
  9. MySQL数据库my.cnf配置文件注释详解
  10. crontab Linux定时器工具
  11. SVD奇异值分解的几何物理意义资料汇总
  12. Hibernate缓存和懒加载的坑你知道多少?这5个简单问题回答不上来就不敢说会用hibernate
  13. ExecutorService
  14. jQuery列表选择美化插件uichoose
  15. String方法,js中Array方法,ES5新增Array方法,以及jQuery中Array方法
  16. struts2 学习01
  17. shell练习题3
  18. python学习笔记-os模块参数
  19. CentOS7安装OpenLDAP+MySQL+PHPLDAPadmin
  20. 对于beta发布的评论

热门文章

  1. js/java 获取、添加、修改、删除cookie(最全)
  2. matplotlib画预测框以及打标签
  3. [线段树]Luogu P3373 【模板】线段树 2
  4. 截图自动添加水印图片工具 pickpick设置中文语言
  5. F#周报2019年第19期
  6. Logstash:运用jdbc_streaming来丰富我们的数据
  7. 绑定 Binding Path=.,Binding.,Binding Source={StaticResource ResourceKey=&quot;Hello&quot;} xmlns:sys=&quot;clr-namespace:System;assembly=mscorlib&quot;
  8. DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能
  9. 使用IDEA创建Spring Boot项目
  10. iframe超出外层元素显示滚动条怎么办?