https://vjudge.net/problem/UVA-1151

题意,给出N个点以及二维坐标,可以在任意两点间建立通路,代价是两点欧几里得距离的平方,同时有q个套餐,套餐x有qx个点,代价是qw,

花费qw就能将这qx个点全部相联通,套餐可以任意选择几种或不选,求将所有的点联通所要的最小代价。

很容易想到一个暴力做法,遍历2^q种套餐方案,将这些点提前加入后再跑kruskal,这样的复杂度有些高了。

其实简单证明一下,我们可以先不买套餐跑一遍kruskal,之后保存下来所选的边。

遍历所有q集合时发现,对于之前没有选到的边,现在加入了几条免费边之后,更不会选到(因为仅凭之前选的边就足以使得这条边无贡献),因为这条边加入后没有贡献,不会因为买套餐而变得有贡献,我们可以提前除去这些边,然后数据就很小了。

 #include<bits/stdc++.h>
using namespace std;
int f[];
int getf(int v){return f[v]==v?v:f[v]=getf(f[v]);}
struct Edge
{
int u,v,w;
bool operator<(const Edge& x)const{
return w<x.w;
}
}e1[],e2[];
int x[],y[],cost[];
int main()
{
int T,N,Q,n,m,xx,i,s,j,k;
//freopen("in.txt","r",stdin);
cin>>T;
while(T--){vector<int> G[];
int m1=,m2=;
cin>>N>>Q;
for(i=;i<Q;++i){
cin>>n>>cost[i];
while(n--){
cin>>xx;
G[i].push_back(xx);
}
}
for(i=;i<=N;++i)
{
cin>>x[i]>>y[i];
for(j=;j<i;++j)
{
e1[m1].u=i;
e1[m1].v=j;
e1[m1++].w=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
}
}
for(i=;i<=N;++i) f[i]=i;
sort(e1,e1+m1);
int ans=;
s=;
for(i=;s<N-&&i<m1;++i)
{
int fu=getf(e1[i].u),fv=getf(e1[i].v);
if(fv!=fu){
e2[m2++]=e1[i];
s++;
f[fv]=fu;
ans+=e1[i].w;
}
}
for(i=;i<(<<Q)-;++i)
{
for(j=;j<=N;++j) f[j]=j;
int sum=; s=;
for(j=;j<Q;++j)
{
if(i&(<<j)){
sum+=cost[j];
for(int k=;k<G[j].size()-;++k){
int fu=getf(G[j][k]),fv=getf(G[j][k+]);
if(fu!=fv){
f[fv]=fu;
s++;
}
}
}
}
for(j=;j<m2&&s<N-;j++)
{
int fu=getf(e2[j].u),fv=getf(e2[j].v);
if(fu!=fv){
s++;
f[fv]=fu;
sum+=e2[j].w;
}
}
ans=min(ans,sum);
}
cout<<ans<<endl;
if(T) cout<<endl; }
return ;
}

uva 1511 最小生成树的更多相关文章

  1. uva 1151最小生成树

    先求一次最小生成树,可以排除n*(n*1)/2-(n-1)条边,每次利用二进制法枚举套餐的选择,套餐中的点直接处理,如果两个套餐有公共点直接合并,他们一定连通,然后枚举第一步最小生成树得到的n-1条边 ...

  2. UVA - 11354Bond最小生成树,LCA寻找近期公共祖先

    看懂题目意思.他的意思是求将全部的城市走一遍,危急度最小.而且给 你两个s,t后让你求在走的时候,从s到t过程中危急度最大的值,并输出它, 然后就是怎样攻克了,这个题目能够说简单,也能够说难 通过思考 ...

  3. UVa 1395 (最小生成树) Slim Span

    题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...

  4. D5 LCA 最近公共祖先

    第一题: POJ 1330 Nearest Common Ancestors POJ 1330 这个题可不是以1为根节点,不看题就会一直wa呀: 加一个找根节点的措施: #include<alg ...

  5. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 7. Graph Algorithms and Implementation Techniques

    uva 10803 计算从任何一个点到图中的另一个点经历的途中必须每隔10千米 都必须有一个点然后就这样 floy 及解决了 ************************************* ...

  6. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...

  7. POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)

    POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...

  8. UVa 1151 - Buy or Build(最小生成树)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. 训练指南 UVA - 11354(最小生成树 + 倍增LCA)

    layout: post title: 训练指南 UVA - 11354(最小生成树 + 倍增LCA) author: "luowentaoaa" catalog: true ma ...

随机推荐

  1. IO 包中的其他类

    打印流 PrintWriter 和 PrintWriter 直接操作输入流和文件 序列流 SequenceInputStream 对多个输入流进行合并 操作对象 ObjectInputStream 和 ...

  2. 关于session的常用用法

    (一)django有四中session实现方式 1.数据库(database-backed sessions) 2.缓存(cached sessions) 3.文件系统(file-based sess ...

  3. 48dp rhythm

  4. this的思考

    问题:JS中为什么要用this? 回答:因为this采用隐式“传递”一个对象的引用,所以可以将API设计得更加简洁和可复用 问题:JS中的this是什么? 背景:this是在运行时绑定的,this的上 ...

  5. zabbix-监控Linux服务器

    一.zabbix监控 1.关闭防火墙 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disabl ...

  6. ajax请求真实服务器数据示例

    // http://study.163.com/webDev/couresByCategory.htm // http://study.163.com/webDev/couresByCategory. ...

  7. Mootools遮罩层练习(原为网上的jquery写法)

    <html > <head> <meta charset="utf-8" /> <title>mootools 遮罩层</ti ...

  8. HDU - 6406 Taotao Picks Apples (RMQ+dp+二分)

    题意:N个高度为hi的果子,摘果子的个数是从位置1开始从左到右的严格递增子序列的个数.有M次操作,每次操作对初始序列修改位置p的果子高度为q.每次操作后输出修改后能摘到得数目. 分析:将序列分为左.右 ...

  9. Python3.x:ConfigParser模块的使用

    Python3.x:ConfigParser模块的使用 简介 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节 ...

  10. Spark 实现自定义对象sequenceFile方式存储,读写示例(scala编写)

    package com.fuge.bigdata.datahub.analysis import java.io.{DataInput, DataOutput} import com.fuge.big ...