uva 1511 最小生成树
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 最小生成树的更多相关文章
- uva 1151最小生成树
先求一次最小生成树,可以排除n*(n*1)/2-(n-1)条边,每次利用二进制法枚举套餐的选择,套餐中的点直接处理,如果两个套餐有公共点直接合并,他们一定连通,然后枚举第一步最小生成树得到的n-1条边 ...
- UVA - 11354Bond最小生成树,LCA寻找近期公共祖先
看懂题目意思.他的意思是求将全部的城市走一遍,危急度最小.而且给 你两个s,t后让你求在走的时候,从s到t过程中危急度最大的值,并输出它, 然后就是怎样攻克了,这个题目能够说简单,也能够说难 通过思考 ...
- UVa 1395 (最小生成树) Slim Span
题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...
- D5 LCA 最近公共祖先
第一题: POJ 1330 Nearest Common Ancestors POJ 1330 这个题可不是以1为根节点,不看题就会一直wa呀: 加一个找根节点的措施: #include<alg ...
- Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 7. Graph Algorithms and Implementation Techniques
uva 10803 计算从任何一个点到图中的另一个点经历的途中必须每隔10千米 都必须有一个点然后就这样 floy 及解决了 ************************************* ...
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...
- 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 / ...
- UVa 1151 - Buy or Build(最小生成树)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 训练指南 UVA - 11354(最小生成树 + 倍增LCA)
layout: post title: 训练指南 UVA - 11354(最小生成树 + 倍增LCA) author: "luowentaoaa" catalog: true ma ...
随机推荐
- Java 之反射机制
java 语言的反射机制 - 在运行状态中,对于任意一个类 (class 文件),都能够知道这个类的所有属性和方法; - 能动态获取类中的信息,也可以理解为对类(字节码文件)的解剖 描述字节码文件的类 ...
- JS改变HTML元素的绝对坐标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- elastic search 查询语句
部署了半个月,分析一下数据: 需要提前知道的是,tpot中,每天的数据存一个index,然后每个index里面有不同的type,每条请求一个document 共24万条请求: 查看整个集群所有数据 以 ...
- WTForms In Flask(WTForms在Flask中的应用)
WTForms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装wtforms : pip3/pip install wtforms 用户登录/注册示例 项 ...
- (4.6)sql2008中的group by grouping sets
最近遇到一个情况,需要在内网系统中出一个统计报表.需要根据不同条件使用多个group by语句.需要将所有聚合的数据进行UNION操作来完成不同维度的统计查看. 直到发现在SQL SERVER 200 ...
- java 中JFinal getModel方法和数据库使用出现问题解决办法
JFinal getModel方法(从页面表单中获取Model对象)+数据库存储问题 一.getmodel方法 1.在JConfig配置类中的数据库映射(存储到数据库时需要此配置) public vo ...
- beego——控制器函数
基于beego的Controller设计,只需要匿名组合beego.Controller就可以,如下所示: type xxxController struct { beego.Controller } ...
- Django框架之ORM(数据库)操作
一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例 ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile、Study
Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile.Study // Compile.Study var reg: TPerlRegEx; begin re ...
- nodejs的http.request使用post方式提交数据请求
官方api文档 http://nodejs.org/docs/v0.6.1/api/http.html#http.request虽然也有POST例子,但是并不完整. 直接上代码:http_post.j ...