题解:

KM模板题

如果n>m,输出-1

如果a[match[i]][i]==-1输出-1

负的边不用考虑

初始都赋值为-1

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int a[N][N],z,e,cas;
int visr[N],T,x,y,exl[N],exr[N],visl[N],match[N],slack[N],n,m;
int dfs(int x)
{
visl[x]=;
for (int i=;i<=m;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%d",&n,&m,&e))
{
printf("Case %d: ",++cas);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)a[i][j]=-1e9;
while (e--)
{
scanf("%d%d%d",&x,&y,&z);
if (z>=)a[x+][y+]=z;
}
if (n>m)
{
puts("-1");
continue;
}
memset(exl,,sizeof exl);
memset(exr,,sizeof exr);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)exl[i]=max(exl[i],a[i][j]);
memset(match,,sizeof match);
for (int i=;i<=n;i++)
{
memset(slack,0x3f,sizeof slack);
while ()
{
memset(visl,,sizeof visl);
memset(visr,,sizeof visr);
if (dfs(i))break;
int d=1e9;
for (int j=;j<=m;j++)
if (!visr[j])d=min(d,slack[j]);
for (int j=;j<=n;j++)
if (visl[j])exl[j]-=d;
for (int j=;j<=m;j++)
if (visr[j])exr[j]+=d;
else slack[j]-=d;
}
}
int ans=,flag=;
for (int i=;i<=m;i++)
{
if (a[match[i]][i]==-1e9)flag=;
ans+=a[match[i]][i];
}
if (flag)puts("-1");else printf("%d\n",ans);
}
}

hdu2426的更多相关文章

  1. HDU2426:Interesting Housing Problem(还没过,貌似入门题)

    #include <iostream> #include <queue> #include <stdio.h> #include <string.h> ...

随机推荐

  1. C#小票打印机动态纸张尺寸

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. C++ 第三十四天

    c++ 已经搁了很久了,之所以捡起来是因为学校数据结构课程设置 **.我对 c++ 的掌握非常不扎实,因为除了顺序阅读 c++ primer 外就没有什么实践, 但是我又无法忍受自己写出来的 * 一样 ...

  3. axios配置大全

    一.安装 1. 利用npm安装npm install axios --save 2. 利用bower安装bower install axios --save 3. 直接利用cdn引入<scrip ...

  4. 20145314郑凯杰 《Java程序设计》课程总结

    20145314郑凯杰 <Java程序设计>课程总结 每周读书笔记链接汇总 ①寒假预习--"helloworld" ②第一周读书笔记 ③第二周读书笔记 ④第三周读书笔记 ...

  5. STL学习笔记(不定期更新)

    algorithm *1.sort() 用法:sort(数组名,名+长度(,cmp)); int cmp(T a,T b)//T是要排序的a,b的类型,也可以是结构体中任意成员变量 { return ...

  6. wamp 环境下配置多台虚拟主机

    首先启动wamp,成功之后,单击图标,找到Apache服务器下的 httpd.conf ,直接打开 按下Ctrl+F键,在搜索框中搜索 Virtual hosts, 搜寻结果如下图: 3. 然后打开w ...

  7. 什么是浮动IP

    源地址:https://www.1and1.com/digitalguide/server/know-how/what-is-a-floating-ip/ What is a floating IP? ...

  8. java for语句执行顺序

    public class test{ public static void main(String[] args) {          int i=0;          for(printChar ...

  9. 客户端发一个post请求

    public static String doPostStr(String httpUrl, String str) { HttpPost httpPost = null; try { HttpCli ...

  10. 7.scala:继承

    版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=315 排版乱?请移步原文获得更好的阅读体验 类似于java中的继承,在scala中同样有继承一说,而且在很多方面 ...