开始理解的有点简单了,也是看了其他的博客之后发现问题的:
题意:因为每一个物件都是受前一个物件的时间限制,所以假设某台机器加工了k个订单,那么用时为t1 + (t1 + t2) + (t1 + t2 + t3)......(t1+...tk) = t1 * k + t2 * (k-1) + t3 * (k-2) +...+tk,于是把每个机器拆成N个点,1-N分别代表倒数第几个加工了这个订单;最小化N命令就是最后输出的答案ans/N。

这个思路开始只是认为是KM算法,其实要理解这个条件。
最小权值完美匹配就是通过最大权完美匹配问题转化而来的:权值取反之后,最后的输出结果取反输出即可!

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<iomanip>
using namespace std;
const int maxx=3005;
const int inf=0x3f3f3f3f;
int linker[maxx];
int lx[maxx],ly[maxx];
char e[maxx][maxx];
int slack[maxx];
int visx[maxx],visy[maxx];
int w[maxx][maxx];
int n,m;
int p;
void init(){p=0;memset(linker,-1,sizeof(linker));memset(e,0,sizeof(e));memset(w,0,sizeof(w));
}int Find(int x){visx[x]=1;for(int y=1;y<=m;y++){if(visy[y]==0){int temp=lx[x]+ly[y]-w[x][y];if(temp==0){visy[y]=1;if(linker[y]==-1||Find(linker[y])){linker[y]=x;return 1;}}else{slack[y]=min(slack[y],temp);}}}return 0;
}
void KM(){memset(ly,0,sizeof(ly));for(int i=1;i<=n;i++){lx[i]=-inf;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(lx[i]<w[i][j]){lx[i]=w[i][j];}}}for(int k=1;k<=n;k++){memset(slack,inf,sizeof(slack));while(true){memset(visx,0,sizeof(visx));memset(visy,0,sizeof(visy));if(Find(k))break;int d=inf;for(int i=1;i<=m;i++){if(visy[i]==0){d=min(d,slack[i]);}}for(int i=1;i<=n;i++){if(visx[i]==1){lx[i]-=d;}}for(int i=1;i<=m;i++){if(visy[i]==1){ly[i]+=d;}else{slack[i]-=d;}}}}
}
int main(){int t;scanf("%d",&t);int count=1;while(t--){init();scanf("%d %d",&n,&m);for(int i=1;i<=n;i++){int index=0;for(int j=1;j<=m;j++){int time;scanf("%d",&time);for(int k=1;k<=n;k++){w[i][++index]=-1*k*time;}}}m=n*m;KM();int ans=0;for(int i=1;i<=m;i++){if(linker[i]!=-1){ans+=-w[linker[i]][i];}}cout<<setiosflags(ios::fixed)<<setprecision(6)<<(double)ans/n<<endl;}return 0;
}

poj3686(最小权值完美匹配)相关推荐

  1. HDU6346(最小权值完美匹配)

    题意:满足 xi+yj≤ai,j(1≤i,j≤n) 的约束下最大化∑ni=1xi+∑ni=1yi, 思路:采用最大权值完美匹配算法:但是现在这里是求最小权值完美匹配问题,所以只需要将权值取反最后在取反 ...

  2. 利用Kuhn-Munkras算法求最小权值匹配

    本文参考博客: http://blog.csdn.net/zhangpinghao/article/details/12242823(代码参考该博客) http://philoscience.itey ...

  3. POJ-2195 Going Home 最小权值匹配

    题意:给定一个网格图,图上有一些人要到一些房子当中去,人和房子的数量一样多,人和房子的曼哈顿距离作为行走的开销,问所有人走到房子中的最小开销. 解法:将人和房子之间两两之间建立带权边,权值为曼哈顿距离 ...

  4. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  5. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  6. ZOJ-2342 Roads 二分图最小权值覆盖

    题意:给定N个点,M条边,M >= N-1.已知M条边都有一个权值,已知前N-1边能构成一颗N个节点生成树,现问通过修改这些边的权值使得最小生成树为前N条边的最小改动总和为多少? 分析:由于计算 ...

  7. 小A与欧拉路 (树加边求最小权值欧拉路+树的直径)

    链接:https://ac.nowcoder.com/acm/contest/369/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...

  8. rqnoj 389 心灵的抚慰 (floyd求解环的最小权值)

    PID389 / 心灵的抚慰☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态 查看最后一次评测记录 质量 7 题目评价 质量 7 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆☆☆ ★☆☆☆☆ ...

  9. HDU - 3488 Tour(二分图最小权匹配+KM)

    题目链接:点击查看 题目大意:给出n个城市,再给出m条有向的道路,问若想以一个或多个环的形式遍历所有的城市一次,所需要的最小权值是多少 题目分析:刚拿到这个题目是有点懵的,因为不知道题目让求什么,其实 ...

最新文章

  1. docker初体验:docker部署nginx负载均衡集群
  2. CVPR 2020 Oral | 人脸识别Loss新突破: 旷视提出Circle Loss,革新深度特征学习范式...
  3. JavaScript兼容HTML代码的注释
  4. java switch null_[改善Java代码]小心switch带来的空值异常
  5. evga x58服务器芯片组,为六核980X而生 EVGA发布X58 FTW3主板
  6. python x y z 1_Python下的数值列表 - range(x,y,z)函数
  7. 键盘消息捕获--MFC
  8. inx的c语言表达式,Spninx 解决的问题
  9. 2012年度IT博客大赛50强报道:马博峰
  10. 联想投资服务器5g芯片,从5G投票到要没必要做芯片,联想到了最危险的时候
  11. java最基础的小总结
  12. python对象回收_python 引用,拷贝,对象回收,弱引用
  13. CentOS linux修改主机名
  14. PX4无人机配置4G空地多机组网系统
  15. kalman滤波理解一:理论框架
  16. 匿名四轴上位机使用方法
  17. 温故而知新(一)—— 再看RNN、LSTM、GRU
  18. 动作事件监听器——实现ActionListener接口
  19. Excel批量调整行高
  20. js添加多个子节点_javascript如何创建子节点

热门文章

  1. PS2019画笔工具、铅笔工具、颜色替换工具
  2. DRF工程搭建、环境安装与配置
  3. RIPv2相对于RIPv1来说主要有3方面的改进。下面的选项中,RIPv2的特点不包括【两个题】
  4. 亚马逊:用CNN进行图像分类的Tricks
  5. 收藏!深度学习计算机视觉模型解析!
  6. 4个可以写进简历的京东 NLP 项目实战
  7. 你了解如何评估模型吗?
  8. 如何在主机win10和虚拟机(virtualbox)中的Ubuntu进行文件传输即共享文件夹的建立
  9. 使用Hexo和Github搭建博客站
  10. 第二项目AIaisell(易销宝)