题意:每条边有两个权值a,b,求图的最小二元和乘积生成树(即该树的sum_a*sum_b最小)。 标程: 1 #include<bits/stdc++.h> 2 #define P pair<ll,ll> 3 #define fir first 4 #define sec second 5 usin ...
分类:
其他好文 时间:
2018-06-13 19:41:49
阅读次数:
189
思路大概同bzoj2395(传送门:http://www.cnblogs.com/DUXT/p/5739864.html),还是将每一种匹配方案的Σai看成x,Σbi看成y,然后将每种方案转化为平面上的点,再用km去找最远的点就行了。 然而几个月前就学过km且到现在还未写过一道km的题的我并不知道k ...
分类:
其他好文 时间:
2016-08-06 00:23:00
阅读次数:
230
所谓最小乘积生成树,即对于一个无向连通图的每一条边均有两个权值xi,yi,在图中找一颗生成树,使得Σxi*Σyi取最小值。 直接处理问题较为棘手,但每条边的权值可以描述为一个二元组(xi,yi),这也就不难想到将生成树转化为平面内的点,x代表Σxi,y代表Σyi(注意这里的xi,yi指的是在生成树中 ...
分类:
其他好文 时间:
2016-08-05 08:55:11
阅读次数:
174
题解:
裸最小乘积生成树。
最小乘积生成树定义:
有一张n个点m条边的无向图,每条边有k个权值。
现在要取一个边集M使得其将所有点连通,并使
∏ki=1(∑j∈Mjcost(j,vali))\prod_{i=1}^k (\sum_j^{j\in M} cost(j,{val_i}) ) 最小
即个边集的每一种边权的总和的乘积最小。
比如:
k=1时,就是裸最小生成树。
k=2时,...
分类:
其他好文 时间:
2015-07-10 15:30:28
阅读次数:
530
分组赛时学到的最小乘积生成树模型,感觉这个思路非常神,可以说是数形结合的经典问题由于生成树有两个权值,我们把每个生成树的权值表示成点坐标(sa,sb)显然我们知道,乘积最小,那么点必然落在下凸壳上但由于点太多,graham之类要先知道所有点再求凸包的算法就失效了于是我们使用quickhull算法,这...
分类:
其他好文 时间:
2015-06-13 12:39:05
阅读次数:
174
设每个点有x,y两个权值,求一棵生成树,使得sigma(x[i])*sigma(y[i])最小。设每棵生成树为坐标系上的一个点,sigma(x[i])为横坐标,sigma(y[i])为纵坐标。则问题转化为求一个点,使得xy=k最小。即,使过这个点的反比例函数y=k/x最接近坐标轴。Step1:求得分...
分类:
其他好文 时间:
2014-09-06 16:01:03
阅读次数:
569