hdu-2255(带权二分图)
题解:板子题。。。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
#define maxn 1005
#define inf 0x3f3f3f3f
using namespace std;
int ex_l[maxn];
int ex_r[maxn];
bool visit_l[maxn];
bool visit_r[maxn];
int match[maxn];
int e[maxn][maxn];
int slack[maxn];
int n,m;
int x,y,w;
bool dfs(int l)
{
visit_l[l]=true;
for(int r=n+1;r<=2*n;r++)
{
if(visit_r[r]==true)
continue;
int v=ex_l[l]+ex_r[r]-e[l][r];
if(v==0)
{
visit_r[r]=true;
if(match[r]==-1||dfs(match[r]))
{
match[r]=l;
return true;
}
}
else
slack[r]=min(slack[r],v);
}
return false;
}
int km()
{
memset(match,-1,sizeof(match));
memset(ex_r,0,sizeof(ex_r));
for(int l=1;l<=n;l++)
{
ex_l[l]=0;
for(int r=n+1;r<=2*n;r++)
{
ex_l[l]=max(ex_l[l],e[l][r]);
}
}
for(int l=1;l<=n;l++)
{
memset(slack,inf,sizeof(slack));
while(1)
{
memset(visit_l,0,sizeof(visit_l));
memset(visit_r,0,sizeof(visit_r));
if(dfs(l))
break;
int d=inf;
for(int r=n+1;r<=2*n;r++)
{
if(!visit_r[r])
d=min(d,slack[r]);
}
for(int k=1;k<=n;k++)
{
if(visit_l[k])
ex_l[k]-=d;
if(visit_r[k+n])
ex_r[k+n]+=d;
else
slack[k+n]-=d;
}
}
}
int ans=0;
for(int i=n+1;i<=2*n;i++)
{
ans+=e[match[i]][i];
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(e,0,sizeof(e));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&x);
e[i][j+n]=x;
}
}
printf("%d\n",km());
}
return 0;
}
hdu-2255(带权二分图)的更多相关文章
- P - 奔小康赚大钱 - hdu 2255(带权值的匹配)
分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- POJ 2195 Going Home (带权二分图匹配)
POJ 2195 Going Home (带权二分图匹配) Description On a grid map there are n little men and n houses. In each ...
- Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)
Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...
- [HAOI2008]移动玩具(状压&带权二分图)
题目描述 • 一个 4 × 4 的 0/1 矩阵 • 每次可以交换相邻两个元素 • 求从初始状态到目标状态的最小交换次数 输入格式 前四行,每行一个长为 4 的 0/1 字符串,描述初始状态. 后四行 ...
- 运动员最佳匹配问题 KM算法:带权二分图匹配
题面: 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...
- POJ 2195 Going Home | 带权二分图匹配
给个地图有人和房子 保证人==房子,每个人移动到房子处需要花费曼哈顿距离的代价 问让人都住在房子里最小代价 显然是个带权二分图最大匹配 转化成以一个网络,规定w是容量,c是代价 1.S向人连边,w=1 ...
- KM(Kuhn-Munkres)算法求带权二分图的最佳匹配
KM(Kuhn-Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的.但是,在了解了算法的执行过程和原理后, ...
- 费用流模板(带权二分图匹配)——hdu1533
/* 带权二分图匹配 用费用流求,增加源点s 和 汇点t */ #include<bits/stdc++.h> using namespace std; #define maxn 1000 ...
- hdu5045:带权二分图匹配
题目大意 : n个人 做m道题,其中 每连续的n道必须由不同的人做 已知第i人做出第j题的概率为pij,求最大期望 思路:考虑每连续的n道题 都要n个人来做,显然想到了带权的二分图匹配 然后就是套模板 ...
随机推荐
- 1、话说linux内核
1.内核和发行版的区别 到底什么是操作系统 linux.windows.android.ucos就是操作系统 操作系统本质上是一个程序,由很多个源文件构成,需要编译连接成操作系统程序(vmlinz.z ...
- python 自动获取星期
自动获取星期: >>> from time import time,localtime,strftime>>> x=localtime(time())>> ...
- Jenkins Pipeline高级用法-ShareLibrary
1.Github配置 1.1 上传jenkinsfile到github https://github.com/zeyangli/ShareLibrary-jenkins.git 2.Jenkins配置 ...
- CSS实现树形结构 + js加载数据
看到一款树形结构,比较喜欢它的样式,就参照它的外观自己做了一个,练习一下CSS. 做出来的效果如下: li { position: relative; padding: 5px 0; margin:0 ...
- 深入理解Redis的持久化
RDB RDB是将当前数据生成快照保存到硬盘上. RDB的工作流程: 1. 执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接 ...
- 剑指Offer-- 之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 /* struct TreeNode { int val ...
- #Leetcode# 1009. Complement of Base 10 Integer
https://leetcode.com/problems/complement-of-base-10-integer/ Every non-negative integer N has a bina ...
- 生成短链接的URL
假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...
- scroll滚动条样式修改
一般我们有两种情况会出现滚动条,一种是overflow,一种是使用scroll. 当我们需要改变这个滚动条样式的时候,我们需要做以下的修改: html: <div id="style- ...
- jquery操作复选框(checkbox)的一些小技巧总结
1.获取单个checkbox选中项(三种写法) //第一种 $("input:checkbox:checked").val() //第二种 $("input:[type= ...