训练指南 UVALive - 5713(最小生成树 + 次小生成树)
layout: post
title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树)
author: "luowentaoaa"
catalog: true
mathjax: true
tags:
- 最小生成树
- 图论
- 训练指南
Qin Shi Huang's National Road System
UVALive - 5713
题意
有n个城市,要修一些路使得任意两个城市都能连通。但是有人答应可以不计成本的帮你修一条路,为了使成本最低,你要慎重选择修哪一条路。假设其余的道路长度为B,那条别人帮忙修的道路两端城市中的总人口为B,要找一个使A/B最大的方案。
题意
先求最小生成树,处理出MST中任意两点之间的最长边。因为别人只答应给修一条路,所以枚举这条路,用这条路替换下一条MST中最长的边(在加入这条路后构成的环中),比较求得A/B的最大值。实际上是把求次小生成树的一些后续操作改改。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e3+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int n,m,x[maxn],y[maxn],p[maxn];int pa[maxn];
int findset(int x){return pa[x]!=x?pa[x]=findset(pa[x]):x;}
vector<int>G[maxn];
vector<double>C[maxn];struct Edge{int x,y;double d;bool operator < (const Edge& rhs)const{return d<rhs.d;}
};Edge e[maxn*maxn];
double maxcost[maxn][maxn];
vector<int>nodes;void dfs(int u,int fa,double facost){//cout<<"dfs="<<u<<endl;for(int i=0;i<nodes.size();i++){int x=nodes[i];maxcost[u][x]=maxcost[x][u]=max(maxcost[x][fa],facost);}nodes.push_back(u);for(int i=0;i<G[u].size();i++){if(G[u][i]==fa)continue;dfs(G[u][i],u,C[u][i]);}
}
double dis(int i,int j){return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
double MST(){m=0;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)e[m++]=(Edge){i,j,dis(i,j)};sort(e,e+m);for(int i=0;i<n;i++){pa[i]=i;G[i].clear();C[i].clear();}int cnt=0;double ans=0;for(int i=0;i<m;i++){int x=e[i].x,y=e[i].y,u=findset(x),v=findset(y);double d=e[i].d;if(u==v)continue;pa[u]=v;G[x].push_back(y);G[y].push_back(x);C[x].push_back(d);C[y].push_back(d);ans+=d;if(++cnt==n-1)break;}return ans;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int t;cin>>t;while(t--){cin>>n;for(int i=0;i<n;i++)cin>>x[i]>>y[i]>>p[i];double tot=MST();memset(maxcost,0,sizeof(maxcost));nodes.clear();dfs(0,-1,0);double ans=-1;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){ans=max(ans,(p[i]+p[j])/(tot-maxcost[i][j]));}cout<<fixed<<setprecision(2)<<ans<<endl;}return 0;
}
转载于:https://www.cnblogs.com/luowentao/p/10349044.html
训练指南 UVALive - 5713(最小生成树 + 次小生成树)相关推荐
- 训练指南 UVALive - 3713 (2-SAT)
layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...
- 最小生成树 次小生成树
树 转载于:https://www.cnblogs.com/aiyi2000/p/9841071.html
- 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)
整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...
- `Computer-Algorithm` 最小生成树MST,Prim,Kruskal,次小生成树
Contents 最小生成树 Algorithm Prim Code Kruskal Prim&KruskalPrim \& KruskalPrim&Kruskal算法的性质 ...
- 最小生成树、次小生成树
一.最小生成树 说到生成树首先要解释一下树,树是一个联通的无向无环图,多棵树的集合则被称为森林. 因此,树具有许多性质: 1.两点之间的路径是唯一的. 2.边数等于点数减一. 3.连接任意两点都会生成 ...
- HDU 4081 最小生成树(或者次小生成树)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4081 Problem Description There were n cities in Chin ...
- poj 1679 次小生成树
次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...
- HDU4081(次小生成树)
1.其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路.最终我们得到的权值便是最小生成树的权值. Max[i][j]表示的最小生成树 ...
- 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)
整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...
最新文章
- bzoj 2756奇怪的游戏
- java 并发_Java并发防范机制
- 7-2 数组元素循环右移问题 (40 分)
- 【引用】IP地址已经分配给另一个适配器问题的解决方法
- 高端中餐美食餐饮海报PSD模板,看着就有食欲
- C/C++怎样传递二维数组,转载自CSDN
- Window Server 2008 R2 文件权限管理
- 2021-06-25绝对定位的理解
- 第一次c语言课程设计——学生选课管理系统
- WEB前端大作业-程序员个人在线简历响应式网站模板(HTML+CSS+JavaScript)
- javaEE常用开源框架的认识及概述,带你深入探索Java开发世界
- 深度剖析华为的管理哲学(建议收藏)
- 牢记公式,ardupilot EKF2就是纸老虎(五)!
- J2EE进阶之JSP和EL表达式 十二
- 如何给PDF文件加密和解密?
- 读《日本包装设计鉴赏》有感之——博客第一篇
- 最容易理解的Raft算法讲解
- vpp与dpdk的关系
- 我的K均值算法的matlab实现
- 《大长今》人物系列:长今心理第二课——申主簿
热门文章
- 【11月18日截稿】【高校支持】第三届机器人、智能控制与人工智能国际学术会议-RICAI 2021...
- 如何搭建ftp服务器实现文件共享
- java常见面试题总结2
- GitHub 热榜:被网友疯狂恶搞的「蚂蚁呀嘿」项目终于开源了!
- 4-5. do...while循环
- 怎样将linux系统打包成iso文件,封装linux系统成iso文件
- SHELL命令 -- 查看显卡型号
- Win7激活工具无效?输入SLMGR -REARM显示不是内部命令?
- csps2019格雷码
- SEO–关于如何通过利用流量精灵刷百度排名及排名原理~