https://www.lydsy.com/JudgeOnline/problem.php?id=3571

https://www.luogu.org/problemnew/show/P3236

小T准备在家里摆放几幅画,为此他买来了N幅画和N个画框。为了体现他的品味,小T希望能合理地搭配画与画框,使得其显得既不过于平庸也不太违和。对于第 幅画与第 个画框的配对,小T都给出了这个配对的平凡度Aij 与违和度Bij 。整个搭配方案的总体不和谐度为每对画与画框平凡度之和与每对画与画框违和度的乘积。具体来说,设搭配方案中第i幅画与第Pi个画框配对,则总体不和谐度为

小T希望知道通过搭配能得到的最小的总体不和谐度是多少。

我能说我debug 1h才发现j打成i了吗TAT

对于最小代价二分图匹配可以KM算法做(当然费用流是可以的但是O(玄学)对吧……)。

这个所求表达式形式像极了最小乘积生成树:BZOJ2395:[Balkan 2011]Timeismoney

所以其实我们只是把生成树部分变成KM就行啦!

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
const int INF=0x3f3f3f3f;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct point{
int x,y;
point(int xx=,int yy=){x=xx,y=yy;}
point operator -(const point &b)const{
return point(x-b.x,y-b.y);
}
int operator *(const point &b)const{
return x*b.y-y*b.x;
}
};
int n,ans,a[N][N],b[N][N];
int dis[N][N],wx[N],wy[N],match[N],sla[N];
bool vx[N],vy[N];
bool dfs(int u){
vx[u]=;
for(int v=;v<=n;v++){
if(!vy[v]){
int w=wx[u]+wy[v]-dis[u][v];
if(!w){
vy[v]=;
if(!match[v]||dfs(match[v])){
match[v]=u;return ;
}
}else sla[v]=min(sla[v],w);
}
}
return ;
}
point KM(){
point res=point(,);
memset(wx,,sizeof(wx));
memset(wy,,sizeof(wy));
memset(match,,sizeof(match));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
wx[i]=max(wx[i],dis[i][j]);
for(int i=;i<=n;i++){
memset(sla,INF,sizeof(sla));
while(){
memset(vx,,sizeof(vx));
memset(vy,,sizeof(vy));
if(dfs(i))break;
int minn=INF;
for(int j=;j<=n;j++)
if(!vy[j])minn=min(minn,sla[j]);
for(int j=;j<=n;j++){
if(vx[j])wx[j]-=minn;
if(vy[j])wy[j]+=minn;
else sla[j]-=minn;
}
}
}
for(int i=;i<=n;i++)
res.x+=a[match[i]][i],res.y+=b[match[i]][i];
ans=min(ans,res.x*res.y);
return res;
}
void work(point l,point r){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=-(a[i][j]*(l.y-r.y)+b[i][j]*(r.x-l.x));
point mid=KM();
if((r-l)*(mid-l)>=)return;
work(l,mid);work(mid,r);
}
int main(){
int t=read();
while(t--){
ans=INF;n=read();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
a[i][j]=read();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
b[i][j]=read();
for(int i=;i<=n;i++)for(int j=;j<=n;j++)dis[i][j]=-a[i][j];
point p1=KM();
for(int i=;i<=n;i++)for(int j=;j<=n;j++)dis[i][j]=-b[i][j];
point p2=KM();
work(p1,p2);
printf("%d\n",ans);
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ3571 & 洛谷3236:[HNOI2014]画框——题解的更多相关文章

  1. 洛谷P3236 [HNOI2014]画框(最小乘积KM)

    题面 传送门 题解 我似乎连\(KM\)都不会打啊→_→ 和bzoj2395是一样的,只不过把最小生成树换成\(KM\)了.因为\(KM\)跑的是最大权值所以取个反就行了 //minamoto #in ...

  2. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  3. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  4. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  5. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  6. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  7. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  8. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

  9. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

随机推荐

  1. DSP5509开发之FPGA接口

    1. DSP5509和FPGA或者CPLD之间是什么接口,DSP相对普通MCU,具有专门的硬件乘法器,程序和数据分开的哈弗结构,特殊的DSP指令,快速的实现各种数字信号处理算法.在一个周期内可以完成一 ...

  2. 使用navicat连接Mysql8.0出现2059错误

    一. 进入MySQL,打开要用navicat连接的数据库 二.打开运行以下代码: ALTER USER 'root'@'localhost' IDENTIFIED BY '你的mysql密码' PAS ...

  3. 卷积神经网络CNN在自然语言处理中的应用

    卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Process ...

  4. ServletContext详解 以及用法

    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletContext,所 ...

  5. 「日常训练」Ice Cave(Codeforces Round 301 Div.2 C)

    题意与分析(CodeForces 540C) 这题坑惨了我....我和一道经典的bfs题混淆了,这题比那题简单. 那题大概是这样的,一个冰塔,第一次踩某块会碎,第二次踩碎的会掉落.然后求可行解. 但是 ...

  6. lintcode112 删除排序链表中的重复元素

    删除排序链表中的重复元素   给定一个排序链表,删除所有重复的元素每个元素只留下一个. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 1->1->2->null,返回 1- ...

  7. CSP201612-1:中间数

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  8. FPGA学习-PS2接口

    选自http://m.elecfans.com/article/774143.html

  9. Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用

    . : 关机, 如果将Linux默认运行等级设置为0, 系统将无法启动; -- : 多用户模式, 允许使用网络文件系统, 一般不使用图形界面登陆就是这种模式; -- : 多用户图形界面模式, 该模式下 ...

  10. Alpha 冲刺(1/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作,对多个目标检测及文字识别模型进行评估.实验,选取较 ...