hdu 4081 次小生成树

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码) 在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。 阅读详情

链接

http://acm.hdu.edu.cn/showproblem.php?pid=4081

题意


找到一个生成树,并且保证A/B最大,所以B要尽量小, A尽量大。


解析


B尽量小,就要想到最小生成树,但是最小生成树里面,可以删除一个边,这样就转化为次小生成树中找A/B最大的情况。或者prim+并查集。


代码1

运行时间:46ms

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define INF 0x3f3f3f3f
struct node
{
    int a,b;
    int num;
};
struct nn
{
    int a,b;
    double val;
    bool operator <(const nn &d) const {
        return val <d.val;
    }
};
node A[1010];
nn B[1010];
int n;
double dis[1010];
bool vis[1010];
int num[1010];
int pre[1010];
int fa[1010];
int M[1010];
int mm;
void init()
{
    for(int i=1;i<=n;i++)
        fa[i]=i,M[i]=A[i].num;
}
int fi(int a){ return a==fa[a] ?  a:(fa[a]=fi(fa[a]));}
void un(int a,int b) { a=fi(a),b=fi(b); fa[a]=b; M[b]=max(M[b],M[a]);}
void work()
{
    int i,j;
    memset(vis,false,sizeof vis);
    memset(pre,-1,sizeof pre);
    for(i=0;i<=n;i++)
        dis[i]=INF;
    dis[1]=0;
    double ans=0;
    double sum=0;
    int m=0;
    while(1)
    {
        int v=-1;
        for(i=1;i<=n;i++)
        {
            if(!vis[i]&&(v==-1||dis[i]<dis[v])) v=i;
        }
        if(v==-1) break;
        vis[v]=true;
        sum=sum+dis[v];
        if(pre[v]!=-1) B[++m].a=pre[v],B[m].b=v,B[m].val=dis[v];
        for(i=1;i<=n;i++)
        {
            double t=sqrt((double)((A[v].a-A[i].a)*(A[v].a-A[i].a)+(A[v].b-A[i].b)*(A[v].b-A[i].b)));
            if(t<dis[i]) dis[i]=t,pre[i]=v;
        }
    }
    sort(B+1,B+1+m);
    init();
    for(i=1;i<=n;i++)
    {
        int a=fi(B[i].a);
        int b=fi(B[i].b);
    //    cout<<B[i].a<<" "<<B[i].b<<" "<<M[a]<<" "<<M[b]<<endl;
        ans=max(ans,(double)(M[a]+M[b])/(sum-B[i].val));
        un(a,b);
    }
    printf("%.2lf\n",ans);
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int i,j;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d%d%d",&A[i].a,&A[i].b,&A[i].num);
        work();
    }
    return 0;
}

代码2:时间复杂度:156ms

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn = 1000+100;
typedef long long LL;
int fa[maxn], head[maxn];
int en[maxn];
double length[maxn][maxn];
struct Edge{
    int t;
    int next;
    Edge (int _t, int _n) {
        t = _t;
        next = _n;
    }
    Edge(){}
}e[500000+10];
int cnt;

void add(int u, int v) {
    e[cnt] = Edge(v, head[u]);
    head[u] = cnt;
    en[u] = cnt;
    cnt++;
}

void init() {
    for (int i=0; i<maxn; i++)
        fa[i] = i;
    cnt = 0;
    memset(head,-1, sizeof(head));
}

struct point {
    double x, y;
    int pu;
    bool operator < (const point &a) const  {
        if (x == a.x)
            return y<a.y;
        return x<a.x;
    }
}p[maxn];

int Find(int x) {
    return x==fa[x]?x:fa[x]=Find(fa[x]);
}

void Union(int u, int v) {
    u = Find(u);
    v = Find(v);
    if (u != v)
        fa[u] = v;
}

struct node {
    int u, v;
    double d;
    double pu;
    bool operator < (const node &a) const {
        return d<a.d;
    }
}edge[1000000+10];

double Dis(point a, point b) {
    return sqrt((a.x-b.x)*(a.x-b.x) + (b.y-a.y)*(b.y-a.y));
}

int main()
{
    int T;
    scanf("%d", &T);
    while (T--) {
        init();
        int n;
        scanf("%d", &n);
        for (int i=0; i<n; i++)
            scanf("%lf%lf%d", &p[i].x, &p[i].y, &p[i].pu);
        for (int i=0; i<n; i++) 
            add(i, i);
        int m=0;
        sort(p, p+n);
        for (int i=0; i<n-1; i++) {
            for (int j=i+1; j<n; j++) {
                double dis = Dis(p[i], p[j]);
                edge[m].u = i;
                edge[m].v = j;
                edge[m].d = dis;
                edge[m].pu = double (p[i].pu+p[j].pu);
                m++;
            }
        }
        sort(edge, edge+m);
        double DIS = 0;
        for (int i=0; i<m; i++) {
            int u = Find(edge[i].u);
            int v = Find(edge[i].v);
            if (u == v)
                continue;
            for (int j=head[u]; j!=-1; j=e[j].next) {
                for (int k=head[v]; k!=-1; k=e[k].next) {
                    length[e[j].t][e[k].t] = length[e[k].t][e[j].t] = edge[i].d;
                }
            }
            e[en[v]].next = head[u];
            en[v] = en[u];
            Union(u, v);
            DIS += edge[i].d;
        }

        double maxx = 0;
        for (int i=0; i<m; i++) {
            double b = edge[i].pu/(DIS-length[edge[i].u][edge[i].v]);
            if (b > maxx)
                maxx = b;
        }
        printf("%.2lf\n", maxx);
    }
    return 0;
}
STM32入门教程:自动门控制 通过这个简单的示例,我们展示了如何使用STM32微控制器来实现一个简单的自动门控制系统。如果有物体靠近门口,我们会改变doorState的值,并使用controlServoMotor函数来控制舵机电机的转动。具体的引脚连接可以根据您的具体硬件来定,例如将红外传感器的输出引脚连接到GPIOA_PIN0引脚。同样,具体的引脚连接可以根据您的具体硬件来定,例如将舵机的控制引脚连接到GPIOA_PIN1引脚。首先,我们需要包含必要的库文件和引用。然后,我们需要定义一些函数来处理红外传感器的输入和舵机电机的输出。 阅读详情

相关推荐

Excel数据清洗实战:8个必学函数搞定90%的脏数据问题(附案例)

本文通过一个完整的销售数据清洗案例,详细讲解了如何组合使用TRIM、CLEAN、SUBSTITUTE等8个核心Excel函数,构建自动化清洗流水线,高效解决日常办公中90%的脏数据问题,从而将时间留给更有价值的分析工作。

weixin_29215391的博客 583

2011 ACM/ICPC 北京赛区现场赛解题: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): 216    Accepted Submission(s): 105 Problem Descri

第七殿堂 1421

从零搭建AMESim与Matlab/Simulink联合仿真环境(2024版软件配置详解)

本文详细介绍了2024年最新版AMESim与Matlab/Simulink联合仿真环境的搭建与配置方法。从软件安装顺序、路径设置到编译器配置,逐步指导如何实现高效联合仿真,特别强调了版本兼容性和环境变量设置等关键细节,帮助工程师快速解决常见问题并优化仿真性能。

weixin_42538752的博客 735

HDOJ 4081: Qin Shi Huang's National Road System

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4081 题目大意: 求一个图的生成树, 可以指定一条边为“魔法边”,使其边权变为0。 在此基础上,要求  “ '魔法边' 连接的两点的点权 / 生成树上其它边的边权"  最大。 算法: 首先,一定是在最小生成树上去掉一条边,然后在被分成的两部分间加上一条边。 因为把

frog的小池塘 1469

IPD的分析工具与模型(十六)CBB公用基础模块管理实现资源共享,缩短开发周期

CBB流程的开发环节,基于CBB规划中所识别和设计的CBB,进行CBB的详细设计(包括参数设计和接口设计),并最终实现CBB的落地开发。作为特殊类型的技术构件,CBB的开发流程,可沿用技术开发中的构件开发流程,具体包括概念、计划、开发和迁移等步骤,具体可参见前文的相关介绍。有了蓝图与架构设计,落地实施是关键攻坚。具体工作内容包括:具体工作内容包括:a. 以相似性、聚类、相对独行性、可组合、可扩展性、可维护性等原则为指导,按照产品的功能特征和业务类型,聚焦零散的功能点,形成功能模块,实现产品功能模块的划分;

corgi2020的博客 2000

SAP COPA实战:手把手教你用CMOD增强搞定自定义特性派生(以客户字段为例)

本文详细介绍了在SAP COPA模块中通过CMOD增强实现自定义特性派生的全流程,以客户字段为例,展示了从特性设计、SPRO配置到特性派生逻辑实现的完整步骤。重点讲解了如何利用CMOD增强技术解决业务需求,提升获利能力段分析的灵活性和准确性。

weixin_30275415的博客 429

次小生成树 配题(HDU 4081)

次小生成树:在最小生成树(MST)的基础上求得。 算法步骤: 基础:求出最小生成树,并且标记最小生成树的所有边 将一个不是最小生成树的边加入到最小生成树中,此时有 N 条边( N 个点),必定存在一个“环”,现在需要去除“环”上一条边使之成为一课生成树。 在“环”中去除的边为除了加入边以外的权值最大的边(因为除了次小,就是最小)。 枚举不在最小生成树上的每一条边,将其进行2、3步操作,然...

猫ER 464

SNAP计算哨兵二号的叶面积指数(LAI)

对于哨兵二号数据以及LANDSAT8数据,SNAP提供已经集成好的模块计算LAI。在Optical->Thematic Land Processing->Biopyhsical Processor目录下面。 对于经过Sen2Cor处理好的数据,需经过重采样才可进行计算。重采样工具在Raster->Geometric->Resampling。 如果选择Biopyhsical Processor S2_10m进行计算,需要将所有的波段都重采样为10米(哨兵二号的第二波段为10米,可据此波

gxwwww的博客 9417

HDU_4081_最小生成树+次小生成树性质

HDU 4081 存坐标点然后建图 为了使得总长度(除去一条特殊的道路)可能小.那么求出最短路. 然后枚举图中的每一条边,A已知. B的求法 如果在最小生成树中就将最短路的和-此条边的长度=剩余总长度 如果此边不在最小生成树中.根据生成树的性质,这条边和最小生成树组成环,我们要减去(除去此边)之外的最长边,这样才能使其他的路总和最少(和判断是否存在次小生成树的维护过程一样) 在求最小生成...

_llc的博客 216

基于Quartus II软件的FPGA综合实验——多功能数字钟

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设计要求二、设计原理三、设计过程1.数码管扫描模块2.计时模块3.闹钟模块4.闹钟响铃模块5.数码管显示模块6.整点报时功能7.模式选择模块(计时器主控电路)四、实验中遇到的困难及解决方案五、总结 前言 FPGA综合实验——多功能数字钟 基于Quartus II软件 一、设计要求 设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进.

qq_53022342的博客 2万+

[附源码]计算机毕业设计Python财务管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+py项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。推荐pycharm社区版;3.mysql环境:建议是用5.7版本均可。

巧灵计算机程序设计 1067

HDU4081-次小生成树

Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10520    Accepted Submission(s): 3708   Problem Descript...

z1164754004z的博客 228

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

HDU 4081 (次小生成树变形)

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081        题意是有n个点,分别输入n个点的坐标和这个点的权值,然后要给这些点建边,建边的权值就是两点间的距离,现在可以免费的建一条边,求免费建边的两个点的权值和与总费用的最大值。        思路就是类比次小生成树的思路,在删边的过程中维护所要求的最大值就好了。 AC代码: ...

Charles_Zaqdt的博客 344

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

hdu4081 次小生成树变形

http://acm.hdu.edu.cn/showproblem.php?pid=4081 Problem Description During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in China ---- they we...

aofan9566的博客 130

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

次小生成树_HDU 4081

题目中的意思是有n个点,给出坐标以及点上的人数,要求我们选出n-1条边,并且在这n-1条边中选出一条边满足  A/B 最大,A:这条边两端人口总数,B:除去这条边之外所有边的长度我们要求解A/B最大,那么我们就要A尽量大,B尽量小,我们首先想到最小生成树,然后枚举每一条边,然后求解我们如果枚举的是最小生成树上的边:(两端人口)/(最小生成树总权值-此条路的权值)如果这条边不在最小生成树上,那么我们...

A_Bo的博客 397

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HDU 4081(次小生成树)

次小生成树模板题 #include #include #include #include #define maxn 1002 #define maxm (maxn * maxn) >> 1 using namespace std; struct Node{ int u, v; double dist; } E[maxm]; //存储边 struct Node2{ int x

哇哈哈的专栏 433

HDU - 4081(次小生成树)

题目网址:点击打开链接 这个wa了一天的题,,,总算是知道错哪了; 这个题目的要求是找两点之间建立一条边,然后这两个点的人口数为A,B为除去这两个点之间的距离,所有点相连通的其他路的总长; 因而转化为一个次小生成树的问题,先生成一个最小生成树,然后开始删边,删一条边之后会发现,分成的两个集合中任意两个点相连,所有的点就又是相互连通的了; 这个题目由于A/B的值未知,所以每两个点都需要考虑进

DS00HY的小博客 455

次小生成树 hdu4081

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

qq_39813645的博客 249

HDU 4081 次小生成树变形记

点击打开链接 题意:n个点用n-1条边连起来,问两个点的人口A除以总的距离减去这两点的距离的最大值,表达能力有限,看看别人怎么翻译的吧,但是代码还是不错的...... 思路:用到的是次小生成树中的记录i->j的最大距离,然后枚举每条边,因为已经求出了最小生成树,所以如果你加入这条边后,肯定会形成一个环(画图会有奇效),然后我们减去这个环的最大值,就可以保证B最小,遍历所有边后,输出最大值,而且

Dan__ge的博客 1193

【HDU】 4081 次小生成树

Problem Description During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in China ---- they were Qi, Chu, Yan, Han, Zhao, Wei and Qin. Ying Zheng was the kin...

胖亚亚的小酒馆 302

hdu4081次小生成树

先求一遍最小生成树,然后遍历所有边,如果这条边在最小生成树中就直接减去这条边的距离,如果不在最小生成树中,那么就构成了一个环,此时需要减去最小生成树中最大的边,即求次小生成树时的maxx, 有一点要注意当求maxx最大值时j!=k,虽然不知道原理是什么。。。。如果有大佬知道求告知 好像求次小生成树时没有这个条件,据说还能prim+dfs做。。。。 #include<map&gt...

weixin_30377461的博客 74

hdu 4081 次小生成树

/* 题意:每个城市有人口,现在有一棵最小生成树,将其中一条边割开,然后选出两个城市的人口A/剩余的最小生成树中的 边和B,使其比值尽可能大。 次小生成树求环上的最大值 */ #include #include #include #include #include using namespace std; #define inf 0x3fffffff #define N 1100 struct i

晴朗的博客 628
上一篇: hdu 5776 鸽巢定理的应用
下一篇: poj 3180 有向图的强连通分量 模板
nielaishan
博客等级 码龄11年 7粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值