Buy or Build UVA - 1151 Kruskal+枚举】的更多相关文章

题意: 大概意思是有 n 个点,现在有 q 个方案 ,第 i 个方案耗费为 ci ,使 Ni 个点联通 ,当然也可以直接使两点联通 ,现求最小生成树的代价. 两点直接联通的代价是欧几里得距离的平方:   由于0<=q<=8,所以我们考虑二进制枚举: 该位为1表示选择该方案,然后每次求一遍cost ,最后取 min 即可: #include<iostream> #include<cstdio> #include<algorithm> #include<c…
题意:平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此, 你可以新建一些边,费用等于两个端点的欧几里得距离的平方.另外还有q(0<=q<=8)个套餐(数量小,可枚举),可以购买,如果你购买了第i个套餐,该套餐 中的所有结点将变得相互连通,第i个套餐的花费为ci. 分析:按照刘汝佳的思路做的.首先求一次本身的最小生成树值,然后枚举购买的套餐(二进制枚举),每次购买了之后,将其权值设为0,并且加进最小生成树. #include<cstdio> #in…
先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. 边比较多,用prim求最小生成树,效果比Kruskal好,枚举套餐的时候在用Kruskal. prim和dijkstra的区别在于点距离的定义. #include<bits/stdc++.h> using namespace std; ; int n,q; ]; vector<]; #de…
Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1369   Accepted: 542 Description World Wide Networks (WWN) is a leading company that operates large telecommunication networks. WWN would like to setup a new network in Borduri…
Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1348   Accepted: 533 Description World Wide Networks (WWN) is a leading company that operates large telecommunication networks. WWN would like to setup a new network in Borduri…
买还是建 紫书P358 [题目链接]买还是建 [题目类型]最小生成树 &题解: 这题真的心累,看了3天,最后照着码还是wa,先放lrj代码,以后再看吧 &代码: // UVa1151 Buy or Build // Rujia Liu #include <cstdio> #include <cmath> #include <cstring> #include <vector> #include <algorithm> using…
题意:平面上有n个点(1<=n<=1000),你的任务是让所有n个点连通.可以新建边,费用等于两端点欧几里德距离的平方.也可以购买套餐(套餐中的点全部连通).问最小费用. 分析: 1.先将不购买任何套餐的最小生成树的所有边(边数为cnt)存起来,目的是枚举套餐时不必再耗Kruskal算法的O(n2)复杂度,而是降低为O(cnt). 2.二进制枚举套餐. 3.枚举套餐时,先将套餐中的边按最小生成树建边,在将不购买任何套餐的最小生成树的cnt条边建上,因为套餐中的边权值为0,所以这样处理不会影响结…
题意:平面上有N个点(1≤N≤1000),若要新建边,费用是2点的欧几里德距离的平方.另外还有Q个套餐,每个套餐里的点互相联通,总费用为Ci.问让所有N个点连通的最小费用.(2组数据的输出之间要求有换行) 解法:利用二进制枚举套餐,时间复杂度是O(2QN2+N2logN).关于时间复杂度,枚举:二进制枚举为2Q,Kruskal为ElogE≈E≈N2:边排序:ElogE≈E≈N2.总的相加. 紫书上提到一个优化:不加任何套餐跑一遍MST(最小生成树),没有选的边便删除掉,因为以后加了套餐之后也选不…
题意: 平面上有n个点,现在要把它们全部连通起来.现在有q个套餐,如果购买了第i个套餐,则这个套餐中的点全部连通起来.也可以自己单独地建一条边,费用为两点欧几里得距离的平方.求使所有点连通的最小费用. 分析: 很明显,如果没有这些套餐的话,就是一个裸的MST. 可以枚举套餐的组合情况,然后把套餐中的边的权值置为0,再求MST. 在求MST的过程中,并不需要把所有的边都加进来.只要把原图的MST的那些边和套餐中的边加进来即可. 因为,对于不在原图的MST的边,购买套餐以后,按照权值排序,排在它之前…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3592 题意: 平面上有n个点(1≤n≤1000),你的任务是让所有n个点连通.为此,你可以新建一些边,费用等于两个端点的欧几里德距离的平方.另外还有q(0≤q≤8)个“套餐”可以购买,如果你购买了第i个套餐,该套餐中的所有结点将变得相互连通.第i个套餐的花费为Ci.求最小的花费.…