题目链接 After completing her final semester, Savita is back home. She is excited to meet all her friends. Her N friends live in different houses spread across the city. There are M roads connecting the houses. The road network formed is connected and do…
简介 无向图中某一点(可以在顶点上或边上),这个点到所有点的最短距离的最大值最小,那么这个点就是 图的绝对中心. 无向图所有生成树中,直径最小的一个,被称为 最小直径生成树. 图的绝对中心的求法 下文设 \(d(i, j)\) 为顶点 \(i,j\) 间的最短路径长. 首先我们考虑枚举每一条边 \((u, v)\),长为 \(L\),并假设绝对中心 \(p\) 在这条边上并且距离 \(u\) 长为 \(x(\le L)\). 对于图中一点 \(i\),\(p\) 到 \(i\) 的距离可以写作…
Description 输入一个无向图G=(V,E),W(a,b)表示边(a,b)之间的长度,求一棵生成树T,使得T的直径最小.树的直径即树的最长链,即树上距离最远的两点之间路径长度. Input 输入第一行包括两个整数N,M,分别表示点与边的个数. 以下M行,每行3个整数X,Y,Z,描述一条无向边(X,Y),且W(X,Y)=Z. Output 仅一个数,即最小直径. Sample Input 3 3 1 2 0 2 3 1 3 1 2 Sample Output 1 [数据范围] 0 < M…
所谓最小乘积生成树,即对于一个无向连通图的每一条边均有两个权值xi,yi,在图中找一颗生成树,使得Σxi*Σyi取最小值. 直接处理问题较为棘手,但每条边的权值可以描述为一个二元组(xi,yi),这也就不难想到将生成树转化为平面内的点,x代表Σxi,y代表Σyi(注意这里的xi,yi指的是在生成树中的边的权值),那么问题就变成了在平面内找一个点使得x*y最小,那么显然这个点是在下凸壳上的. 因此可以首先找出两个一定在凸包上的点,例如A(minx,y),B(miny,x),在直线AB下方找一个在凸…
分析:就是不断递归寻找靠近边界的最优解 学习博客(必须先看这个): 1:http://www.cnblogs.com/autsky-jadek/p/3959446.html 2:http://blog.csdn.net/u013849646/article/details/51524748 注:这里用的最小乘积生成树的思想,和dp结合 每次找满足条件的最优的点,只不过BZOJ裸题的满足条件是形成一棵树 这个题是大于m,生成树借用最小生成树进行求解最优,大于m用dp进行求解最优 #include…
[题意] n个点m条边的图 q次询问 找到一条从s到t的一条边 使所有边的最大危险系数最小 InputThere will be at most 5 cases in the input file.The first line of each case contains two integers N, M (2 ≤ N ≤ 50000, 1 ≤ M ≤ 100000) – numberof cities and roads. The next M lines describe the roads…
 算法提高 最小方差生成树   时间限制:1.0s   内存限制:256.0MB        问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W.保证图连通.n=m=0标志着测试文件的结束. 输出格式 对于每组数据,输出最小方差,四舍五入到0.01.输出格式按照样例. 样例输入 4 51 2 12 3 23 4 24 1 12 4 34 61 2 12 3 23 4…
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46828379"); } 题解: 裸最小乘积生成树. 最小乘积生成树定义: 有一张n个点m条边的无向图,每条边有k个权值. 如今要取一个边集M使得其将全部点连通.并使 ∏ki=1(∑j∈Mjcost(j,vali))…
问题描述 每条边两个权值 \(x,y\),求一棵 \((\sum x) \times (\sum y)\) 最小的生成树 Sol 把每一棵生成树的权值 \(\sum x\) 和 \(\sum y\) 看成平面上的一个点 \((X,Y)\) 那么就是要求 \(X \times Y\) 最小 设 \(k=X \times Y\),则 \(Y = \frac{k}{X}\) 也就是要求这个反比例函数最靠近坐标轴 我们知道了 \(X\) 最小和 \(Y\) 最小的答案(两遍最小生成树) 设这两个点为 \…
题意:求最大边与最小边差值最小的生成树.n<=100,m<=n*(n-1)/2,没有重边和自环. 题解: m^2的做法就不说了. 时间复杂度O(n*m)的做法: 按边排序,枚举当前最大的边. 那也就是说,把边排序之后从小到大编号,要在[1,r]这段区间内生成一棵最大边与最小边差值最小的生成树. 那每次生成肯定不行(这就是暴力m^2做法..),我们考虑继承. 假设[1,r-1]这段区间内的苗条树已经生成,那我们只需要把当前第r条边加进去. 加进去分两种情况: x和y还没有联通:直接加边 x和y已…
目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W.保证图连通.n=m=0标志着测试文件的结束. 输出格式 对于每组数据,输出最小方差,四舍五入到0.01.输出格式按照样例. 样例输入 4 51 2 12 3 23 4 24 1 12 4 34 61 2 12 3 23 4 34 1 12 4 31 3 30 0 样…
题意 每条边有两个权值\(c,t\),请求出一颗生成树,使得\(\sum c\times \sum t\)最小 题解 为什么生成树会和计算几何扯上关系-- 对于每棵树,设\(x=c,y=t\),我们可以把它看成平面上的一个点,其中\(\sum c\)为横坐标,\(\sum t\)为纵坐标.那么题目就可以转化成求反比例函数图像上的点\(k=xy\)满足\(k\)最小 我们先求出一棵\(\sum c\)最小的生成树,设这个点为\(A\),和一棵\(\sum t\)最小的生成树,设为\(B\),那么如…
今天考试的时候果然题目太难于是我就放弃了……转而学习了一下最小乘积生成树. 最小乘积生成树定义: (摘自网上一篇博文). 我们主要解决的问题就是当k = 2时,如何获得最小的权值乘积.我们注意到一张图可以有很多棵生成树,我们将每一棵生成树的权值记为(x, y),表示第一种权值之和为x, 第二种权值之和为y. 这样,很自然联想到二维平面上的坐标,每一棵生成树即为这个平面上的一个点.我们所想要寻找的点就是x * y最小的点.这样的点在什么位置?显然,若x1 <= x2, y1 <= y2,1号点的…
本意是求最小瓶颈生成树,但是我们可以证明:最小生成树也是最小瓶颈生成树(其实我不会).数据范围很小,暴力kruscal即可. #include<cstdio> #include<algorithm> using namespace std; ]; bool operator < (const Edge &a,const Edge &b){return a.w<b.w;} ],rank[],tot; ;i<=n;i++)fa[i]=i;} int f…
Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15268   Accepted: 5987   Special Judge Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the c…
题目链接 BZOJ2395 题意:无向图中每条边有两种权值,定义一个生成树的权值为两种权值各自的和的积 求权值最小的生成树 题解 如果我们将一个生成树的权值看做坐标,那么每一个生成树就对应一个二维平面上的坐标 在同一个反比例函数图像上的点权值相同,反比例函数\(xy\)越小的点越贴近坐标轴 所以答案一定在下凸包上 我们就递归查找这样的点 我们先分别将两种权值作为指标求出\(A\)和\(B\)两个点,分别是\(x\)最小的点和\(y\)最小的点,即为下凸包的一个边界 我们找到位于\(AB\)左下角…
传送门 题目大意 有n个村庄,每个村庄都有一个(x, y)坐标和z海拔,定义两个村庄间的dist为坐标的距离,cost为海拔差的绝对值,求图的一颗生成树,使得\(\frac{\sum cost}{\sum dist}\)最小. 题解 最小比例生成树的裸题. 看到\(\frac{\sum cost}{\sum dist}\)的分数形式,首先可以想到分数规划: 设\(ans = \frac{\sum cost}{\sum dist}\) 则\(\sum cost - ans * \sum dist…
Luogu5540 最小乘积生成树 题目链接:洛谷 题目描述:对于一个\(n\)个点\(m\)条边的无向连通图,每条边有两个边权\(a_i,b_i\),求使\((\sum a_i)\times (\sum b_i)\)最小的生成树. 数据范围:\(n\le 200,m\le 10000,a_i,b_i\le 255\) 这题是一道非常妙的计算几何题目. 我们对于每个生成树,用\((\sum a_i,\sum b_i)\)这个二维平面上的点来表示它,那么就是求所有点中横坐标乘纵坐标的最小值. 画画…
1 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W.保证图连通.n=m=0标志着测试文件的结束. 输出格式 对于每组数据,输出最小方差,四舍五入到0.01.输出格式按照样例. 样例输入 4 5 1 2 1 2 3 2 3 4 2 4 1 1 2 4 3 4 6 1 2 1 2 3 2 3 4 3 4 1 1 2 4 3 1 3 3 0 0 样例输出 Case 1:…
图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前向星:静态链表,即用数组实现邻接表的功能.对于每个顶点,前向星存储的是该顶点的邻接边而非邻接点,head[maxn]存储的是顶点信息,edge[maxm]存储的是顶点对应的边的信息 struct Edge { int to;///某个顶点u的邻接点 int next;///顶点u的下一条邻接边的编号…
题意:有M只猴子,他们的最大跳跃距离为Ai.树林中有N棵树露出了水面,给出了它们的坐标.问有多少只猴子能在这个地区露出水面的所有树冠上觅食. 解法:由于要尽量多的猴子能到达所有树冠,便用Kruskal求一次MST最小生成树,也就得到了最大边最小的最小瓶颈生成树.在用这个最大边权计算合法的猴子树. P.S.由于没有那些一下子输入几十万的数据,所以读优和不读优差别不大. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstri…
2018年论文题 约定:令点集$V=[1,n]$.边集$E=[1,m]$,记$m$条边依次为$e_{i}=(x_{i},y_{i},c_{i})$(其中$1\le i\le m$),将其按照$c_{i}$从小到大排序,即不妨假设有$c_{1}\le c_{2}\le...\le c_{m}$ 先来考虑$T=1$的情况,即如何求最小方差生成树 题意即求$\min_{E_{T}\subseteq E,E_{T}为生成树}\frac{\sum_{x\in E_{T}}(\mu-c_{x})^{2}}{…
http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 18595   Accepted: 5245 Description David the Great has just become the king of a desert country. To win the respect of his people, he decided to b…
题目链接 /* *题目大意: *一个简单图,n个点,m条边; *要求一颗生成树,使得其最大边与最小边的差值是所有生成树中最小的,输出最小的那个差值; *算法分析: *枚举最小边,用kruskal求生成树,不断更新差值得到最优值; **/ #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<clim…
引用别人的解释: 题意:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可, 建造水管距离为坐标之间的欧几里德距离(好象是叫欧几里德距离吧),费用为海拔之差 现在要求方案使得费用与距离的比值最小 很显然,这个题目是要求一棵最优比率生成树, 概念 有带权图G, 对于图中每条边e[i], 都有benifit[i](收入)和cost[i](花费), 我们要求的是一棵生成树T, 它使得 ∑(benifit[i]) / ∑(cost[i]), i∈T 最大(或最小). 这…
用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,现在要求方案使得费用与距离的比值最小,很显然,这个题目是要求一棵最优比率生成树. 解题思路: 对答案进行二分,当把代进去的答案拿来算最小生成树的时候,一旦总路径长度为0,就是需要的答案. 0-1规划是啥? 概念有带权图G, 对于图中每条…
题目大意:给你n个点的图,求苗条度(最大边减最小编)尽量小的生成树 思路:sort以后暴力枚举区间即可 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using namespace std; #define LL long long #define ALL(a) a.begin(), a.end() #define pb push_back #define mk make_pair #define fi f…
Problem 树上倍增 题目大意 给出一个图,给出若干个点对u,v,求u,v的一条路径,该路径上最小的边权值最大. Solution 看到这个题第一反应是图论.. 然而,任意路径最小的边权值最大,如果仔细思考的话就会知道,如果两个点相互连通,那么一定走的是最大生成树上的路径,而不会选择其他任何一条路径去走. 这个是可以非常简单证明的,就不再详述. 那么既然知道了这个,当然是先建一颗最大生成树啦! 现在问题来了,Prim&Kruskal,选哪个? 分析一下,prim复杂度$O(n^2)$,n为总…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2395 如果把 \( \sum t \) 作为 x 坐标,\( \sum c \) 作为 y 坐标,则每棵生成树都是二维平面上的一个点. 答案是二维平面上的一个下凸壳.先求出只考虑 t 的最小生成树和只考虑 c 的最小生成树,它们就是凸壳的两端. 已知两端,考虑递归下去,则要找到距离这两端构成的直线最远的点. 这就是点到直线的距离,等价于三个点组成的三角形面积最小:考虑叉积公式,得出面积关于…
设每个点有x,y两个权值,求一棵生成树,使得sigma(x[i])*sigma(y[i])最小. 设每棵生成树为坐标系上的一个点,sigma(x[i])为横坐标,sigma(y[i])为纵坐标.则问题转化为求一个点,使得xy=k最小.即,使过这个点的反比例函数y=k/x最接近坐标轴. Step1:求得分别距x轴和y轴最近的生成树(点):A.B(分别按x权值和y权值做最小生成树即可). Step2:寻找一个在AB的靠近原点一侧的且离AB最远的生成树C,试图更新答案. [怎么找???? ——由于C离…