一眼的KM,但是建图的时候记得不用的点设为0,点少的一边补齐,这个非常重要,因为KM追求完全匹配,如果无法完全匹配会非常慢

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 105
#define _clr(x) memset(x,-1,sizeof(int)*MAXN) int mp[MAXN][MAXN], match1[MAXN], match2[MAXN];
int KM(int m,int n,int mat[][MAXN],int *match1,int *match2)
{
int s[MAXN],t[MAXN],l1[MAXN],l2[MAXN];
int p,q,i,j,k,ret=0;
for(i=0;i<m;i++)
{
l1[i]=-INF;
for(j=0;j<n;j++)
l1[i]=mat[i][j]>l1[i]?mat[i][j]:l1[i];
if(l1[i]==-INF) return -1;
}
for(i=0;i<n;i++)
l2[i]=0;
_clr(match1);
_clr(match2);
for(i=0;i<m;i++)
{
_clr(t);
p=0;q=0;
for(s[0]=i;p<=q&&match1[i]<0;p++)
{
for(k=s[p],j=0;j<n&&match1[i]<0;j++)
{
if(l1[k]+l2[j]==mat[k][j]&&t[j]<0)
{
s[++q]=match2[j];
t[j]=k;
if(s[q]<0)
{
for(p=j;p>=0;j=p)
{
match2[j]=k=t[j];
p=match1[k];
match1[k]=j;
}
}
}
}
}
if(match1[i]<0)
{
i--;
p=INF;
for(k=0;k<=q;k++)
{
for(j=0;j<n;j++)
{
if(t[j]<0&&l1[s[k]]+l2[j]-mat[s[k]][j]<p)
p=l1[s[k]]+l2[j]-mat[s[k]][j];
}
}
for(j=0;j<n;j++)
l2[j]+=t[j]<0?0:p;
for(k=0;k<=q;k++)
l1[s[k]]-=p;
}
}
for(i=0;i<m;i++)
ret+=mat[i][match1[i]];
return ret;
} int d[205][205];
int main(){
int n,m;
int _; scanf("%d",&_);
while(_--) {
scanf("%d %d",&n,&m);
for(int i = 1; i <= n+m; ++i)
for(int j = 1; j <= n+m; ++j) {
scanf("%d",&d[i][j]);
if(d[i][j] == -1) d[i][j] = INF;
}
for(int k = 1; k <= n+m; ++k) {
for(int i = 1; i <= n+m; ++i) {
for(int j = 1; j <= n+m; ++j) {
d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
}
}
} for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= m; ++j) {
mp[i-1][j-1] = d[i][n+j];
if(mp[i-1][j-1] == INF) mp[i-1][j-1] = 0;
}
}
if(n > m) {
for(int i = 1; i <= n; ++i) {
for(int j = m+1; j <= n; ++j) {
mp[i-1][j-1] = 0;
}
}
}else if(n < m) {
for(int i = n+1; i <= m; ++i)
for(int j = 1; j <= m; ++j) {
mp[i-1][j-1] = 0;
}
} int tt = max(n, m);
printf("%d\n",KM(tt,tt,mp,match1,match2));
}
return 0;
}

“玲珑杯”ACM比赛 Round #4 B Best couple的更多相关文章

  1. “玲珑杯”ACM比赛 Round #12题解&源码

    我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧!                                     A ...

  2. “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】

    A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...

  3. “玲珑杯”ACM比赛 Round #19 B -- Buildings (RMQ + 二分)

    “玲珑杯”ACM比赛 Round #19 Start Time:2017-07-29 14:00:00 End Time:2017-07-29 16:30:00 Refresh Time:2017-0 ...

  4. “玲珑杯”ACM比赛 Round #1

    Start Time:2016-08-20 13:00:00 End Time:2016-08-20 18:00:00 Refresh Time:2017-11-12 19:51:52 Public ...

  5. “玲珑杯”ACM比赛 Round #18

    “玲珑杯”ACM比赛 Round #18 Start Time:2017-07-15 12:00:00 End Time:2017-07-15 15:46:00 A -- 计算几何你瞎暴力 Time ...

  6. “玲珑杯”ACM比赛 Round #1 题解

    A:DESCRIPTION Eric has an array of integers a1,a2,...,ana1,a2,...,an. Every time, he can choose a co ...

  7. 玲珑杯”ACM比赛 Round #4 1054 - String cut 暴力。学到了扫描的另一种思想

    http://www.ifrog.cc/acm/problem/1054 问删除一个字符后的最小循环节是多少. 比赛的时候想不出,不知道怎么暴力. 赛后看了别人代码才晓得.唉,还以为自己字符串还不错, ...

  8. “玲珑杯”ACM比赛 Round #18--最后你还是AK了(搜索+思维)

    题目链接   DESCRIPTION INPUT OUTPUT SAMPLE INPUT 1 4 2 1 2 5 2 3 5 3 4 5 5 5 SAMPLE OUTPUT 35 HINT 对于样例, ...

  9. “玲珑杯”ACM比赛 Round #22 E 贪心,脑洞

    1171 - 这个E大概是垃圾桶捡来的 Time Limit:2s Memory Limit:128MByte Submissions:138Solved:45 DESCRIPTION B君在做 CO ...

  10. “玲珑杯”ACM比赛 Round #13 题解&源码

    A 题目链接:http://www.ifrog.cc/acm/problem/1111 分析:容易发现本题就是排序不等式, 将A数组与B数组分别排序之后, 答案即N∑i=1Ai×Bi 此题有坑,反正据 ...

随机推荐

  1. webrtc底层一对一连接过程探索(三)

    一.连接过程继续解读-----fun33-fun35解读 完整代码如下: //fun33-37 console.error('fun35-37==>2332==>2332'); var q ...

  2. Missing artifact net.sf.json-lib:json-lib:jar:2.4错误和Eclipse安装Maven插件错误

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.配置Maven项目的pom.xml文件报错 (1).错误描述:Missing artifac ...

  3. FlappyBird Pygame

    视频链接 GitHub链接:https://github.com/yanpeng1314/FlappyBird from InitObject import * def startGame(): mo ...

  4. 小甲鱼OD学习第11讲

    这次我们的任务是破解这个需要注册的软件,如下图所示 我们这次从字符串入手,我们查找 unregistered  字符串 然后我们在如下图的字符串下断点 然后我们来到断点处,我们观察到 地址为 0040 ...

  5. qt中的多线程

    1.dialog.h #define DIALOG_H #include <QDialog>#include"mythread.h"namespace Ui {clas ...

  6. PHP 5.6 微信上传临时素材的坑

    /** * 上传素材 */ function add_material($url){ $access_token = wx_access_token(); $wx_url = "https: ...

  7. zabbix 网络模板自动发现端口时,过滤掉某些特定规则的端口,减少item的方法

    1.需求描述        默认情况下Zabbix 模板 中网络接口自动发现接口时,会产生很多item,有时候会有我们不需要的一些接口,这时候需要过滤掉他们.        比如我有一台运行kvm的服 ...

  8. Window Server 布署 WCF 服务 , 权限配置问题

    起因: 客户服务器运行环境要求提高安全性,建议数据连接串采取 加密措施 ,或改用 Window 验证 连接数据库服务 .于是我们打算选择后着,将后台服务(Window Server)数据库连接串调整为 ...

  9. Springmvc 中org.springframework.http.converter.json.MappingJackson2HttpMessageConverter依赖jackson包

    1,问题详情:Spring使用4.3.5.Release版本后 在SpringMvc配置文件中配置json 解析器后出现报错信息 [org.springframework.web.context.Co ...

  10. 在windows上安装nginx

    在windows上安装nginx   最近自己也尝试了一下在windows上安装nginx,其实非常的简单,这里算是备忘一下.   首先需要到nginx的官网上下载最新版的nginx:http://n ...