uvalive5713(次小生成树)

IIC软件协议及硬件知识汇总 IIC软件协议及硬件相关知识,真的是非常齐全了! 阅读详情

先求出最小生成树,然后n^2枚举两个点,在两个点之间连一条边,就形成了一个环,然后求出两点间人数的和除以那个环在树上的边的最大边,更新最大值.求最大权值边可以用熟练剖分.复杂度n^2logn.

#include <cstdio>
#include <cstring>
#include <vector>
#include<cmath>
#include <algorithm>
using namespace std;
#define Del(a,b) memset(a,b,sizeof(a))
const int N = 10005;
const int inf = 0x3f3f3f3f;
const int maxn = 1005;
int c[maxn];
double x[maxn],y[maxn];
double bmap[maxn][maxn];
int vis[maxn];
int pre[maxn];
double lowc[maxn];
int dep[N],siz[N],fa[N],id[N],son[N],top[N];
double val[maxn];
int num;
vector<int> v[N];
double res = -inf*1.0;
struct tree
{
    int x,y;
    double val;
    void read(int a,int b,double c){
        x = a;
        y = b;
        val = c;
    }
};
tree e[N];
inline double cla(int a,int b)
{
    return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}
inline double prim(double cost[maxn][maxn],int n)
{
    double ans = 0;
    for(int i=0;i<n;i++) pre[i] = 0;
    memset(vis,0,sizeof(vis));
    vis[0] = true;
    for(int i=1;i<n;i++) lowc[i] = cost[0][i];
    for(int i=1;i<n;i++)
    {
        double  minc = inf*1.0;
        int p = -1;
        for(int j=0;j<n;j++)
            if(!vis[j]&&minc>lowc[j])
            {
                minc = lowc[j];
                p = j;
            }
        if(minc==inf*1.0) return -1;
        ans += minc;
        e[i].read(pre[p]+1,p+1,minc);
        v[pre[p]+1].push_back(p+1);
        v[p+1].push_back(pre[p]+1);
        vis[p] = true;
        for(int j=0;j<n;j++)
        {
            if(!vis[j]&&lowc[j]>cost[p][j]){
                lowc[j] = cost[p][j];
                pre[j] = p;
            }
        }
    }
    return ans;
}
void dfs1(int u, int f, int d) {
    dep[u] = d;
    siz[u] = 1;
    son[u] = 0;
    fa[u] = f;
    for (int i = 0; i < v[u].size(); i++) {
        int ff = v[u][i];
        if (ff == f) continue;
        dfs1(ff, u, d + 1);
        siz[u] += siz[ff];
        if (siz[son[u]] < siz[ff])
            son[u] = ff;
    }
}
void dfs2(int u, int tp) {
    top[u] = tp;
    id[u] = ++num;
    if (son[u]) dfs2(son[u], tp);
    for (int i = 0; i < v[u].size(); i++) {
        int ff = v[u][i];
        if (ff == fa[u] || ff == son[u]) continue;
        dfs2(ff, ff);
    }
}
#define lson(x) ((x<<1))
#define rson(x) ((x<<1)+1)
struct Tree
{
    int l,r;
    double val;
};
Tree tree[4*N];
void pushup(int x) {
    tree[x].val = max(tree[lson(x)].val, tree[rson(x)].val);
}
void build(int l,int r,int v)
{
    tree[v].l=l;
    tree[v].r=r;
    if(l==r)
    {
        tree[v].val = val[l];
        return ;
    }
    int mid=(l+r)>>1;
    build(l,mid,v*2);
    build(mid+1,r,v*2+1);
    pushup(v);
}
void update(int o,int v,int val)  //log(n)
{
    if(tree[o].l==tree[o].r)
    {
        tree[o].val = val;
        return ;
    }
    int mid = (tree[o].l+tree[o].r)/2;
    if(v<=mid)
        update(o*2,v,val);
    else
        update(o*2+1,v,val);
    pushup(o);
}
double query(int x,int l, int r)
{
    if (tree[x].l >= l && tree[x].r <= r) {
        return tree[x].val;
    }
    int mid = (tree[x].l + tree[x].r) / 2;
    double ans = 0;
    if (l <= mid) ans = max(ans, query(lson(x),l,r));
    if (r > mid) ans = max(ans, query(rson(x),l,r));
    return ans;
}
double Yougth(int u, int v) {
    int tp1 = top[u], tp2 = top[v];
    double ans = 0;
    while (tp1 != tp2) {
        //printf("YES\n");
        if (dep[tp1] < dep[tp2]) {
            swap(tp1, tp2);
            swap(u, v);
        }
        ans = max(query(1,id[tp1], id[u]), ans);
        u = fa[tp1];
        tp1 = top[u];
    }
    if (u == v) return ans;
    if (dep[u] > dep[v]) swap(u, v);
    ans = max(query(1,id[son[u]], id[v]), ans);
    return ans;
}
void Clear(int n)
{
    for(int i=1;i<=n;i++)
        v[i].clear();
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        scanf("%lf%lf%d",&x[i],&y[i],&c[i]);
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                bmap[i][j] = bmap[j][i] = cla(i,j);
        double l = prim(bmap,n); res = -inf*1.0;
        num = 0;
        dfs1(1,0,1);
        dfs2(1,1);
        for (int i = 1; i < n; i++) {
            if (dep[e[i].x] < dep[e[i].y]) swap(e[i].x, e[i].y);
            val[id[e[i].x]] = e[i].val;
        }
        build(1,num,1);
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                int sum = c[i]+c[j];
                res = max(res,sum/(l-Yougth(i+1,j+1)));
            }
        }
        printf("%.2f\n",res);
        Clear(n);
    }
    return 0;
}


基于LED可见光通信的物联网系统设计_344 随着物联网技术的不断发展,传统无线通信在工业环境中面临电磁干扰强、通信质量不稳定等问题。为此,本文设计了一种基于LED可见光通信的物联网系统,实现工厂车间内设备状态的稳定、高效、低干扰数据传输。系统主要由设备节点、设备主机、华为云物联网服务器以及可视化上位机构成。 设备节点采集机器的出货量、运行状态、机身温度等关键信息,通过调制后的LED可见光信号发送至设备主机。主机利用红外接收器接收光信号后进行解调处理,并通过WIFI模块将数据上传至华为云IOT服务器。 阅读详情

相关推荐

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 246

【UVALIVE 5713】秦始皇修路(最小瓶颈路+Kruskal)

道士徐福的名字让我们开始唱起“徐福记……”

AFO 833

MODNet模型轻量化实战:从PyTorch到NCNN移动端部署,模型缩小75%性能不减

本文详细介绍了MODNet模型轻量化实战,从PyTorch到NCNN移动端部署的全过程。通过量化压缩和推理优化,模型体积缩小75%的同时保持性能不减,在千元级安卓设备上实现25FPS的实时人像抠图。文章深入解析MODNet架构、PyTorch到ONNX转换的陷阱与解决方案,以及NCNN量化部署的极致优化实践,为移动端实时人像抠图提供了技术突破与工程实现。

weixin_29098117的博客 296

《信息学奥赛一本通 提高篇》 第四部分 数据结构 第4章 倍增求LCA

例题1 点的距离 信息学奥赛一本通(C++版)在线评测系统 例题2 暗的连锁(Poj3417) 信息学奥赛一本通(C++版)在线评测系统 LOj10131 暗的连锁_juruo_xlh-优快云博客 暗之连锁——解题报告_风中的微尘的博客-优快云博客 LOJ 暗的连锁 (POJ3417)【LCA + 树上差分 + 计数】 - Frank-King - 博客园 例题3 异象石 信息学奥赛一本通(C++版)在线评测系统 LOJ #10132. 「一本通 4.4 例 3」异象石 解

青少年趣味编程 608

力扣(Leetcode)第1题:两数之和(C语言版本)

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6

qq_39855356的博客 3312

别再死磕RD算法了!用MATLAB手把手复现SAR后向投影(BP)成像(附完整代码与避坑点)

本文详细介绍了如何使用MATLAB实现合成孔径雷达(SAR)后向投影(BP)成像算法,突破传统RD算法在大斜视和复杂轨迹场景中的局限。通过完整的代码示例和避坑指南,帮助读者掌握BP算法的核心原理、内存优化策略和并行计算技巧,提升SAR成像精度与效率。

weixin_30908103的博客 298

次小生成树(信息学奥赛一本通 1555)

题目描述 原题来自:BeiJing 2010 组队赛给定一张N个点M条边的无向图,求无向图的严格次小生成树。设最小生成树的边权之和为sum,严格次小生成树就是指边权之和大于sum的生成树中最小的一个。 输入格式 第一行包含两个整数N和M,表示无向图的点数与边数;接下来MM行,每行三个数x,y,z,表示点x和点y之间有一条边,边的权值为z。 输出...

anglanjing7414的博客 552

基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例

以下是一个基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例。这个系统使用langchain库进行文档处理、检索,以及与大语言模型交互。

max500600的博客 743

最小生成树应用uvalive5713

主要就是库鲁斯卡儿后边会变得有序如果你是用邻接表连得图顺序就乱了然后建的表也木用了,所以不采用邻接表建图克鲁斯卡尔的时候。易错点!!!!! #include #include #include #include #include using namespace std; struct edgee { int from, to; double value; bool operator<(ed

guoshiyuan484的博客 370

基于强化学习控制策略的三相逆变器仿真

强化学习控制器的核心在于定义状态空间、动作空间、奖励函数以及选择合适的强化学习算法(例如DQN、DDPG等)。对于三相逆变器,状态可以是输出电压、电流等信息;动作则可能是调制指数的变化量;奖励函数则应鼓励快速准确地跟踪参考信号。定义状态空间和动作空间状态空间可以包括逆变器的输出电压、电流及其变化率等信息。动作空间则是控制器可执行的动作,例如PWM信号的调整幅度。matlab深色版本% 定义状态和动作空间维度numObs = 6;% 假设有六个状态变量(例如三相电压和电流)

amy_mhd的博客 135

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

UVALive 5713 Qin Shi Huang's National Road System(次小生成树)

题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3714 题目大意:n个平面上的城市要修建道路,每个城市有人,使他们连通。有一个人他能用法术造出任意一条道路。现在给你这 n 个点的二维坐标,设法术造的路两端的城市人口和为 A,B为人工

沉溺的专栏 767

AI视频生成模型训练:从数据准备到部署全流程

咱们这次的目的就像是要建造一座超级厉害的AI视频生成魔法城堡。范围呢,就是从收集建造城堡的材料(数据准备)开始,到把城堡搭建起来(模型训练),再到让城堡能供大家使用(模型部署),涵盖了整个过程的方方面面。接下来我们会先给大家介绍一些重要的术语,就像认识冒险途中的关键道具一样。然后引入一个有趣的故事,带大家进入AI视频生成的奇妙世界,解释核心概念以及它们之间的关系。接着会详细讲解核心算法原理、数学模型和公式,还会有项目实战,带大家亲自体验代码的魅力。

小白菜的博客 399

训练指南 UVALive - 5713(最小生成树 + 次小生成树)

layout: post title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树) author: "luowentaoaa" catalog: true mathjax: true tags: - 最小生成树 - 图论 - 训练指南 Qin Shi Huang's National Road System UVALive - 5713 题意 有n个城市,要修一些路使...

weixin_30443747的博客 156

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

uvaLive5713 次小生成树

uvaLive5713 修建道路使得n个点任意两点之间都可以连通,每个点有都有一定的人口,现在可以免费修一条道路, A是免费修的道路两端结点的人口之和, B的其它不是免费修道路的长度的总和 要求的是A/B的最短值。 B其实就是最小生成树删除一条边只有的权值之和B。 只要我们知道生成树上任意两点之间的最长边,那么只要在这两点之间修一条边, 然后删除最长边,它还是一棵树。 而已这时候的权值之...

weixin_30908707的博客 95

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

UVAlive5713 Qin Shi Huang's National Road System【次小生成树】【DP】

LINK1 LINK2 题目大意 给你平面上的n个点 每个点有一个权值 让你求出一个生成树 可以选择一条边不花费代价 要最大化这条边两边端点的权值/剩下n-2条边的长度之和 思路 发现发现其实端点权值其实不太好处理 那么我们就用最暴力的方式来枚举这样的一条边 但是显然剩下的部分不能直接暴力最小生成树 那么就直接在原图的最小生成树上面进行考虑 加上一条边一定需要删除一条边 这样的操作一定会删除两点...

weixin_30817749的博客 94

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

UVALive - 5713 Qin Shi Huang's Naitonal Road System 【思维 and 次小生成树】

传送门 题意: 二维平面上有n个点, 每个点有一个人口数. 现在我们想让所有n个点联通,并且我们可以免费修一条路,即我们要让A/B最大, 其中A是免费修的那条路的端点的人口数和,而B是剩下联通的路的总和。 思路: n只有1000,所以我们可以暴力枚举加那条边,然后减去枚举那条边的端点之间最大的边, 因为我们要B最小, 即剩下的总和最小, 那么肯定是找最小生成树有最优的, 然后又要删去树上端点任...

Anxdada -- 我等风来也等你 284

UVALive - 5713

秦始皇要修建连通所有城市的路,一共有N个点以及各个点的坐标和人口。修建很多条路使N个城市连通,但是可以使其中一条路的修建费用为0。在修建费用最小的前提下,使得A/B最大。A指费用为0的路所连通的两个城市的人口和,B指除修建费用为0的路之外的所以路之和。 解题思路:因为要是整体的修建费用最小,必定要求他的最小生成树。但是可以使生成树中的一条边的费用为0,这样就不能简单的光求最小生成树。因为可以使连

guaiguai12138的博客 435

UVALive - 5713 最小生成树

题意: 秦始皇修路,已知n个城市的坐标以及该城市的人口数,修路的费用是两个城市之间的欧几里得距离,其中可以有一条路不用花费代价但是要求这条路连接的两个城市的人口之和A/B尽量大,其中B是修路的总费用。 输入t组数据 输入n城市个数 输入n行x,y,z表示坐标和人口数 输出A/B. 代码: //类似次小生成树的处理方法,先求出最小生成树值ans,枚举要选的边u-v,...

anuancong1219的博客 107

Uvalive 5713 - Qin Shi Huang's National Road System(枚举+最小瓶颈路)

题目链接 https://vjudge.net/problem/UVALive-5713 【题意】 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;秦朝有n个城市,需要修建一些道路使得任意两个城市之间连通,道士徐福可以用法术修路,不用花钱,但是只能修一条路,因此需要慎重选择道士徐福要修哪条路。秦始皇不仅希望其他道路的总长度B尽量短,同时还希望徐福修的路连接的...

Change the world by program. 242

最小生成树求最大比率 UVALive - 5713

题目链接:https://vjudge.net/problem/UVALive-5713 题意:给出t组数据,每组数据第一行给出一个n,表示点的数量,接下来n行,每行有三个数字,分别是点的坐标x,y和点的值w。现在我们要用n-1条边来连接这n个点,秦始皇希望这n-1条边的权值之和最小,现在徐福说他可以让其中一条边的权值为0,但是他希望这条边所连接的两点的值之和最大,所以秦始皇决定使A/B的值最大...

weixin_30336061的博客 121

UValive 5713 Qin Shi Huang's National Road System

Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1287    Accepted Submission(s): 475 Problem Desc

hahalidaxin的专栏 583

UVALive - 5713 Qin Shi Huang's National Road System

prim + 邻接矩阵储存两点间最大距离,然后枚举即可。#include<iostream> #include<string> #include<cstdio> #include<set> #include<map> #include<stack> #include<list> #include<vector> #include<queue> #include<algorithm> #include

圣人惠的博客 266

【UVALive】5713 Qin Shi Huang's National Road System 最小生成树

传送门:

poursoul 1202
上一篇: vijos1412(第k优背包)
下一篇: 热爱工作的蒜蒜(带限制最短路)
constbh
博客等级 码龄10年 10粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值