HDU 2255.奔小康赚大钱 最大权匹配
奔小康赚大钱
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9828 Accepted Submission(s): 4328
这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。
另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老百姓都比较富裕,他们都能对每一间房子在他们的经济范围内出一定的价格,比如有3间房子,一家老百姓可以对第一间出10万,对第2间出2万,对第3间出20万.(当然是在他们的经济范围内).现在这个问题就是村领导怎样分配房子才能使收入最大.(村民即使有钱购买一间房子但不一定能买到,要看村领导分配的).
100 10
15 23
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
#define PI acos(-1.0)
const int maxn=1e3+,maxm=1e5+,inf=0x3f3f3f3f,mod=1e9+;
const ll INF=1e18+;
int nx,ny;
int edge[maxn][maxn];
int matchx[maxn],matchy[maxn];
int visx[maxn],visy[maxn];
int slack;
int x[maxn],y[maxn];
int dfs(int u)
{
visx[u]=;
for(int i=; i<=ny; i++)
{
if(visy[i]) continue;
int tmp=x[u]+y[i]-edge[u][i];
if(tmp==)
{
visy[i]=;
if(matchy[i]<||dfs(matchy[i]))
{
matchx[u]=i,matchy[i]=u;
return ;
}
}
else if(tmp<slack) slack=tmp;
}
return ;
}
int KM()
{
for(int i=; i<=nx; i++)
{
x[i]=-inf;
for(int j=; j<=ny; j++)
x[i]=max(x[i],edge[i][j]);
}
fill(y+,y+ny+,);
fill(matchx+,matchx+nx+,-);
fill(matchy+,matchy+ny+,-);
for(int i=; i<=nx; i++)
{
while(true)
{
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
slack=inf;
if(dfs(i)) break;
for(int i=; i<=nx; i++)
if(visx[i]) x[i]-=slack;
for(int i=; i<=ny; i++)
if(visy[i]) y[i]+=slack;
}
}
int res=;
for(int i=; i<=ny; i++)
if(matchy[i]!=-)
res+=edge[matchy[i]][i];
return res;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
scanf("%d",&edge[i][j]);
nx=ny=n;
cout<<KM()<<endl;
}
return ;
}
最大权匹配
HDU 2255.奔小康赚大钱 最大权匹配的更多相关文章
- hdu 2255 奔小康赚大钱 最大权匹配KM
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...
- 二分图最大权匹配问题&&KM算法讲解 && HDU 2255 奔小康赚大钱
作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 ——奔小康赚大钱——————【KM算法裸题】
奔小康赚大钱 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- hdu 2255 奔小康赚大钱 (KM)
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- HDU - 2255 奔小康赚大钱 KM算法 模板题
HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...
随机推荐
- Linux 安装nginx 及配置
安装openssl库 # yum install -y openssl openssl-devel 安装gcc # yum install gcc-c++ 安装 PCRE # yum ...
- el-js中循环遍历el的集合
遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...
- WebView 加载网页返回后,jsp界面数据消失(一个斜杆引起来的风波)
http://ip:port//interface/app/index.jsp 如果不小心就会把,port后面的//两个斜杆给忽略... 当有两个斜杆时,webview仍可以将网页,正常加载.但是数据 ...
- ssh X协议转发
X协议的作用是远程登录Linux运行GUI界面 主机2开启ssh服务service ssh start 主机1 ssh连接主机2:ssh -X root@192.168.1.110 -p 53 然后可 ...
- shiro 入门
参考文章: https://www.cnblogs.com/maofa/p/6407102.html https://www.cnblogs.com/learnhow/p/9747134.html h ...
- Mybatis学习链接
mybatis实战教程(mybatis in action),mybatis入门到精通 http://blog.csdn.net/techbirds_bao/article/details/923 ...
- 合并两个排序的链表(python)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def _ ...
- Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用
一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...
- C++中的构造函数
C++中的构造函数可以分为4类: (1)默认构造函数.以Student类为例,默认构造函数的原型为 Student()://没有参数 (2)初始化构造函数 Student(int num,int ag ...
- 14. Longest Common Prefix (截取字符串)
Write a function to find the longest common prefix string amongst an array of strings. char* longest ...