题解:

KM算法模板

然后我把另一边加了点

然后写了#define int long long

然后莫名挂。。。

然后去掉就过了

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,a[N][N],slack[N],x,exr[N],exl[N],match[N],visl[N],visr[N];
int dfs(int x)
{
visl[x]=;
for (int i=;i<=n;i++)
if (!visr[i])
{
int k=exl[x]+exr[i]-a[x][i];
if (k==)
{
visr[i]=;
if (!match[i]||dfs(match[i]))
{
match[i]=x;
return ;
}
}
else slack[i]=min(slack[i],k);
}
return ;
}
int main()
{
while (~scanf("%d%d",&n,&m))
{
int ans1=;
memset(a,,sizeof a);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
scanf("%d",&x),a[j][i]=x*;
for (int i=;i<=n;i++)
scanf("%d",&x),ans1+=a[x][i],a[x][i]++;
int kkk=n;n=m;
memset(exl,,sizeof exl);
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
exl[i]=max(a[i][j],exl[i]);
memset(match,,sizeof match);
memset(exr,,sizeof exr);
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)slack[j]=1e9;
while ()
{
memset(visl,,sizeof visl);
memset(visr,,sizeof visr);
if (dfs(i))break;
int d=1e9;
for (int j=;j<=n;j++)
if (!visr[j])d=min(d,slack[j]);
for (int j=;j<=n;j++)
{
if (visl[j])exl[j]-=d;
if (visr[j])exr[j]+=d;
else slack[j]-=d;
}
}
}
int ans=;
for (int i=;i<=m;i++)
ans+=a[match[i]][i];
printf("%d %d\n",kkk-ans%,(ans-ans1)/);
}
}

最新文章

  1. transient关键字的用法
  2. makefile中的target到底代表什么?
  3. GCC 编译选项(转)
  4. 对iOS中MVC的理解
  5. Asp.net多行文本框随内容增加而高度增加
  6. vs2013提交github代码
  7. Spark编程模型及RDD操作
  8. solr query的post方式
  9. 5.两分钟让你明白app后端有啥用
  10. JavaScript Object中的函数assign
  11. Ordering Tasks
  12. 关于ionic如何到最新版本
  13. web service 部 分
  14. HTTP协议中源端口和目标端口的问题
  15. Timeout in android httpclient
  16. Microsoft Dynamics CRM4.0 和 Microsoft Dynamics CRM 2011 JScript 方法对比
  17. 【bug】使用微信分享SDK,配置成功但分享信息异常
  18. typora快捷键之速成笔记
  19. 河南省队选拔 HAOI2015 解题报告
  20. 寄存器简介 与 ebp esp

热门文章

  1. 对Docker的一点理解
  2. Java 对比Hashtable、Hashmap、Treemap有什么不同?
  3. 对JVM的理解
  4. oracle导入时报错
  5. 20145329 《Java程序设计》第三周学习总结
  6. kernel command line 参数详解
  7. Objective-C 集成农行支付接口
  8. 配置ssh秘钥登陆
  9. 爬虫之动态HTML处理(Selenium与PhantomJS )
  10. Gift for GS5