题意:国王有N个儿子,现在每个儿子结婚都能够获得一定的喜悦值,王子编号为1-N,有N个女孩的编号同样为1-N,每个王子心中都有心仪的女孩,现在问如果安排,能够使得题中给定的式子和最大。

分析:其实题目中那个开根号是个烟雾弹,只要关心喜悦值的平方即可。那么对王子和女孩之间构边,边权为喜悦值的平方,对于每一个王子虚拟出一个女孩边权为0,这样是为了所有的王子都能够有女孩可以配对,以便算法能够正确的执行。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; const int N = ;
const int inf = 0x3f3f3f3f;
int n, m;
int like[N];
int w[N][N<<];
int match[N<<];
int lx[N], ly[N<<], slack[N<<];
int vx[N], vy[N<<];
int marry[N]; bool path(int u) {
vx[u] = ;
for (int v = ; v <= m; ++v) {
if (vy[v] || w[u][v] == -) continue;
int t = lx[u]+ly[v]-w[u][v];
if (!t) {
vy[v] = ;
if (!match[v] || path(match[v])) {
match[v] = u;
return true;
}
} else {
slack[v] = min(slack[v], t);
}
}
return false;
} void KM() {
memset(lx, 0x80, sizeof (lx));
memset(ly, , sizeof (ly));
memset(match, , sizeof (match));
memset(marry, , sizeof (marry));
for (int i = ; i <= n; ++i) {
for (int j = ; j <= m; ++j) {
if (w[i][j] != -) {
lx[i] = max(lx[i], w[i][j]);
}
}
}
for (int i = ; i <= n; ++i) {
memset(slack, 0x3f, sizeof (slack));
while () {
memset(vx, , sizeof (vx));
memset(vy, , sizeof (vy));
if (path(i)) break;
int d = inf;
for (int j = ; j <= m; ++j) {
if (!vy[j]) d = min(d, slack[j]);
}
if (d == inf) break;
for (int j = ; j <= n; ++j) {
if (vx[j]) lx[j] -= d;
}
for (int j = ; j <= m; ++j) {
if (vy[j]) ly[j] += d;
else slack[j] -= d;
}
}
}
for (int i = ; i <= m; ++i) {
if (match[i] && i <= n) {
marry[match[i]] = i;
}
}
for (int i = ; i <= n; ++i) {
printf(i == ? "%d" : " %d", marry[i]);
}
puts("");
} int main() {
int T;
scanf("%d", &T);
while (T--) {
memset(w, 0xff, sizeof (w));
scanf("%d", &n);
m = n << ;
for (int i = ; i <= n; ++i) {
scanf("%d", &like[i]);
}
int x, y;
for (int i = ; i <= n; ++i) {
scanf("%d", &x);
for (int j = ; j < x; ++j) {
scanf("%d", &y);
w[i][y] = like[i] * like[i];
}
w[i][n+i] = ;
}
KM();
}
return ;
}

ZOJ-2362 Beloved Sons 最大权值匹配的更多相关文章

  1. zoj 2362 Beloved Sons【二分匹配】

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2361 来源:http://acm.hust.edu.cn/vjudg ...

  2. HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法

    二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...

  3. POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解

    题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...

  4. Tour HDU - 3488(最大权值匹配)

    Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...

  5. 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  6. hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...

  7. 二分图最大权值匹配 KM算法 模板

    KM算法详解+模板 大佬讲的太好了!!!太好了!!! 转载自:http://www.cnblogs.com/wenruo/p/5264235.html KM算法用来求二分图最大权完美匹配. 本文配合该 ...

  8. HDU 2255 KM算法 二分图最大权值匹配

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. POJ 2195 Going Home 【二分图最小权值匹配】

    传送门:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

随机推荐

  1. Linux系统的中断、系统调用和调度概述【转】

    转自:http://blog.csdn.net/yanlinwang/article/details/8169725 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近学习Linux操作系统, ...

  2. linux 常见操作命令

    1.网络查询和配置 查询网卡和配置信息:ifconfig 查询指定网卡信息:ifconfig eth1 配置网卡ip信息:vi /etc/sysconfig/network-scripts/ifcfg ...

  3. Axure简介

    Axure RP(Rapid Prototyping快速原型) 是美国公司Axure Software Solution公司旗舰产品,是一个专业的快速原型设计工具,让负责定义需求和规格.设计功能和界面 ...

  4. JDK结构介绍

    dt.jar和tools.jar位于:{Java_Home}/lib/下, 而rt.jar位于:{Java_Home}/jre/lib/下, 其中: (1) rt.jar是JAVA基础类库,也就是你在 ...

  5. var_dump(is_writeable(ini_get("session.save_path")));

    var_dump(is_writeable(ini_get("session.save_path")));

  6. App store 如何使用 promo code | app store 打不开精品推荐和排行榜

    1. app store 如何使用 promo code: 在app store的 右下角精品推荐标签页,拉到最下面 点击“兑换” ,跳转到新的页面,输入兑换码,然后右上角“兑换”,程序开始自动下载并 ...

  7. 发送xml报文去第三方请求获取xml报文数据

    import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import j ...

  8. c#读取Excel的列名问题

    在修改c#读取Excel的时候,遇到了一些小问题,总结下,希望别人不用再浪费时间 读取excel的时候,如果是空行就不读取? SELECT * FROM [DB_ESTATE$] where F2&l ...

  9. E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案

    转载自:http://www.cnblogs.com/eddy-he/archive/2012/06/20/2555918.html cd /var/lib/dpkg sudo mv info inf ...

  10. 用re-sign.jar重签名apk后安装失败的解决办法

    问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...