JZOJ4727 挺进

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现) 内容概要:本文围绕城市空中交通环境下多无人机协同路径规划问题展开深入研究,重点探讨了在包含建筑物、禁飞区、动态威胁等复杂约束条件下,如何利用仿生优化算法(如布谷鲶鱼优化算法CCO、灰雁优化算法GGO、田忌赛马优化算法THRO)实现安全、高效的多无人机路径规划。文章提出了一种分层规划策略,融合全局路径规划与局部动态避障机制,构建了综合考虑路径长度、威胁暴露度、高度变化及地形碰撞风险的多目标优化模型。通过Matlab仿真平台对多种算法进行对比实验,系统评估了各算法在路径安全性、收敛速度、优化性能和鲁棒性方面的表现,并深入分析了现有方法的局限性,对未来研究方向如动态环境适应、通信受限下的分布式协同等进行了展望。; 适合人群:具备一定编程基础,熟悉Matlab/Simulink仿真环境,从事无人机系统设计、智能交通、自动化控制、路径规划算法研究等相关领域的科研人员及高校研究生。; 使用场景及目标:①应用于城市空中交通系统中多无人机的协同任务执行与动态避障;②为复杂威胁环境下多智能体系统的路径规划提供先进算法支持与仿真验证框架;③辅助研究人员深入理解并复现仿生优化算法在高维、多约束路径规划问题中的具体实现与性能差异。; 阅读建议:此资源以Matlab代码实现为核心,紧密结合理论建模与仿真实验,建议读者在学习过程中重点关注算法的设计原理、参数调优策略及仿真结果的可视化分析,结合文中提供的实验数据进行横向对比,以深刻把握不同仿生算法的搜索机制、适用场景及其在实际工程应用中的潜力与挑战。 立即下载

题目大意

给你一棵树,让你断掉一条边,使得形成的两棵树的直径和最大。
1≤n≤1000001≤n≤100000

Solution1

看别人可以用DFSDFS序 + 线段树 + RMQRMQ求LCALCA来做,不过倍增的LCALCA会被卡,让我感到很难受,所以就没写。

Solution2

题解原话 :裸的树形DP。

照着这个思路思考了一下,发现还是很可做的,而且复杂度比上面的那个要少个loglog。

我们对每个节点now记录这几个东西 :
fst[now] :从nownow开始向下的最长链。

snd[now] :从nownow开始向下的次长链。

trd[now] :从nownow开始向下的第三长链。

s1[now] :从nownow开始向下的最长链的nownow能直接到的节点。

s2[now] :从nownow开始向下的次长链的nownow能直接到的节点。

注 : 这些可能会与想的不同,详见代码。


d[now] : 表示以nownow为根节点的树的直径。

d1[now] :表示nownow向下能直接到的节点中,以自己为根的子树最大直径。

d2[now] :表示nownow向下能直接到的节点中,以自己为根的子树次大直径。

ds[now] :表示nownow向下能直接到的节点中,以自己为根的子树最大直径的节点。
分割线上面的可以在第一次DFSDFS中求出来,下面的可以在第二次DFSDFS中求出来。

预处理之后,枚举断哪条边,然后可以O(1)O(1)得出答案。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>

const int maxn = 100007;
const int maxm = 1e3 + 7;
typedef long long ll; 

class Map{
private :
    int n;
    ll ans;

    struct Node{
        int u, v, w, nex;

        Node (int u = 0, int v = 0, int w = 0) :
            u(u),
            v(v),
            w(w),
            nex(0) {}
    };
    Node edge[maxn * 2];
    int head[maxn], cnt;

    ll fst[maxn], snd[maxn], trd[maxn]; //链
    int s1[maxn], s2[maxn];

    ll d[maxn], d1[maxn], d2[maxn]; //直径
    int ds[maxn];

    ll fa[maxn]; //子树外的距离

public :
    Map() :
        cnt(1) {}

    void Init(int x) {
        n = x;
    }

    void AddEdge(int u, int v, int w) {
        edge[++cnt] = Node(u, v, w);
        edge[cnt].nex = head[u];
        head[u] = cnt;
    }

    void Search(int now, int fath) {
        ll sum = 0;
        for (int i = head[now]; i; i = edge[i].nex) {
            if (edge[i].v == fath) {
                continue;
            }
            int v = edge[i].v, w = edge[i].w;
            Search(v, now);
            if (fst[v] + w > sum) {
                sum = fst[v] + w;
                s1[now] = v;
            }
        }
        fst[now] = sum;
        sum = 0;
        for (int i = head[now]; i; i = edge[i].nex) {
            if (edge[i].v == fath || edge[i].v == s1[now]) {
                continue;
            }
            int v = edge[i].v, w = edge[i].w;
            if (fst[v] + w > sum) {
                sum = fst[v] + w;
                s2[now] = v;
            }
        }
        snd[now] = sum;
        for (int i = head[now]; i; i = edge[i].nex) {
            if (edge[i].v == fath || edge[i].v == s1[now] || edge[i].v == s2[now]) {
                continue;
            }
            int v = edge[i].v, w = edge[i].w;
            trd[now] = std :: max(trd[now], fst[v] + w);
        }       
    }

    void DFS(int now, int fath) {
        d[now] = fst[now] + snd[now];
        ll sum = 0;
        for (int i = head[now]; i; i = edge[i].nex) {
            if (edge[i].v == fath) {
                continue;
            }
            int v = edge[i].v, w = edge[i].w;
            if (v == s1[now]) {
                fa[v] = std :: max(fa[now] + w, snd[now] + w);
            } else {
                fa[v] = std :: max(fa[now] + w, fst[now] + w);
            }
            DFS(v, now);
            d[now] = std :: max(d[now], d[v]);
            if (d[v] > sum) {
                sum = d[v];
                ds[now] = v;
            }
        }
        d1[now] = sum;
        for (int i = head[now]; i; i = edge[i].nex) {
            if (edge[i].v == fath || edge[i].v == ds[now]) {
                continue;
            }
            int v = edge[i].v, w = edge[i].w;
            d2[now] = std :: max(d2[now], d[v]);
        }
    }

    void Find(int now, int fath, ll &ans) {
        for (int i = head[now]; i; i = edge[i].nex) {
            int v = edge[i].v, w = edge[i].w;
            if (v == fath) {
                continue;
            }
            ll res = d[v];
            if (v == ds[now]) {
                ll sum = d2[now];
                if (v == s1[now]) {
                    sum = std :: max(sum, snd[now] + std :: max(fa[now], trd[now]));
                } else {
                    sum = std :: max(sum, fst[now] + std :: max(fa[now], snd[now]));
                }
                ans = std :: max(ans, sum + res);
            } else {
                ll sum = d1[now];
                if (v == s1[now]) {
                    sum = std :: max(sum, snd[now] + std :: max(fa[now], trd[now]));
                } else {
                    sum = std :: max(sum, fst[now] + std :: max(fa[now], snd[now]));
                }
                ans = std :: max(ans, sum + res);
            }
            Find(v, now, ans);
        }
    }
};

class Solution {
private :
    int n;
    Map mp;
    ll ans;

public :
    Solution () {
        Get();
        Solve();
    }

    void Get() {
        freopen("etg.in", "r", stdin);
        freopen("etg.out", "w", stdout);
        scanf("%d", &n);
        mp.Init(n);
        for (int i = 1; i <= n; i++) {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            mp.AddEdge(u, v, w);
            mp.AddEdge(v, u, w);
        }
    }

    void Solve() {
        mp.Search(1, 0);
        mp.DFS(1, 0);
        mp.Find(1, 0, ans);
        printf("%lld\n", ans);
    }
};
Solution sol;

int main() {}
仿真+课设Multisim直流可调稳压电源(0-15V)仿真设计基于LM317+LM337【仿真+课程报告】 内容概要:本文详细介绍了一种基于LM317(正压调节)和LM337(负压调节)芯片的Multisim直流可调稳压电源仿真设计方案,输出电压范围为0-15V,具备完整的电路仿真模型与课程设计报告。设计涵盖线性稳压电源的核心原理,包括电压调节机制、元件参数配置、双极性电源构建及仿真测试流程,突出理论与实践结合。文档还附带丰富的扩展资源,如三相PWM整流器、函数信号发生器等仿真项目,并提供百度网盘链接用于获取全套资料,适用于电子类课程设计与自主学习。整体内容系统性强,注重仿真操作指导与工程实践能力培养。; 适合人群:电子信息工程、自动化、电气工程及其相关专业的本科生、专科生,以及正在进行模拟电子技术课程设计或毕业设计的学生。; 使用场景及目标:①深入理解线性稳压电源的工作原理与设计方法;②掌握Multisim软件在电路仿真中的实际应用;③完成基于LM317/LM337的可调稳压电源课程设计任务;④提升模拟电路系统的设计、仿真与分析综合能力; 阅读建议:建议结合Multisim软件同步实践,按照文档电路图逐步搭建仿真模型,重点关注电压调节电路的实现细节与参数设置,并参考所提供的其他仿真资源拓展知识广度,强化工程思维训练。 立即下载

相关推荐

阻尼器磁流变阻尼器MR Damper非线性(阻尼、滞回)特性研究(Matlab代码实现)

内容概要:本文围绕磁流变阻尼器(MR Damper)的非线性特性开展深入研究,重点剖析其在动态载荷作用下的阻尼力响应与滞回行为所表现出的强非线性特征,并基于Matlab平台进行系统建模与数值仿真。通过建立能够准确描述MR阻尼器非线性力学行为的数学模型,模拟其在不同激励条件、电流强度和运动频率下的动态响应过程,进而对系统的非线性特性进行定性与定量分析。研究涵盖了模型构建、参数设定、仿真执行与结果可视化等全过程,突出了Matlab在处理复杂非线性系统仿真中的强大功能与工程实用性,为智能材料器件在振动控制领域的应用提供了坚实的理论支撑与技术路径。; 适合人群:具备一定控制理论、机械动力学或智能材料基础知识,熟悉Matlab编程环境的研究生、科研人员及从事振动控制、结构工程等相关领域的工程技术人员。; 使用场景及目标:①用于智能材料与结构领域的科研与教学,帮助深入理解磁流变阻尼器的工作机理与非线性动力学特性;②为车辆半主动悬架系统、建筑结构抗震减震、桥梁风振抑制等实际工程中的振动控制系统设计、仿真验证与参数优化提供技术支持;③作为非线性系统建模、动力学仿真与Matlab编程实践的经典案例,有效提升使用者的系统分析能力和工程软件应用水平。; 阅读建议:建议读者结合文中提供的Matlab代码进行动手实践,通过调整模型参数(如电流、激励幅值与频率)观察系统响应的变化规律,深入探究非线性特性的形成原因与影响因素,并可尝试将该建模方法迁移至其他智能阻尼器件(如压电、电流变阻尼器)的研究中,以拓展应用视野。

[树形DP][暴力]删边

题目描述 给出N个点,N-1条边的连通图. 现要求删除一条边,使得连通块的直径总和最大.所谓连通块的直径是指连通块中最远两点之间的距离。 问:直径总和最大是多少? Input   文件名为 delete.in   第一行正整数N.   接下来N-1行.每行两个数,A,B,LEN表示A,B(1&lt;=A,B&lt;=N)有一条长度为Len(1&lt;=Len&lt;=1000)的边连...

~NULL~ 656

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 890

[dfs][树的直径] Jzoj P1737 删边

Description   给出N个点,N-1条边的连通图.  现要求删除一条边,使得连通块的直径总和最大.所谓连通块的直径是指连通块中最远两点之间的距离。     问:直径总和最大是多少? Input   文件名为 delete.in  第一行正整数N.  接下来N-1行.每行两个数,A,B,LEN表示A,B(1<=A,B<=N)有一条长度为...

weixin_30339457的博客 235

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1212

关于st-link usb communication error的解决方法

一,问题 在MDK5中使用ST-Link下载时出现: st-link usb communication error Error:flash download failed - target dll has been canceled 二,解决过程 通过网上查阅得知大部分方法都是通过更换老版本的固件包以及操作硬件解决,我试了绝大部分方法都不好使,且老版本的包没有找到,于是试着更新一下固件包,但是更...

qq_43557907的博客 3万+

【JZOJ4727】挺进 题解

题目~~~~~~ETG的地图是树形的,相邻房间有一定距离。一开始,系统会随机断掉一条边,然后把四个宝箱两两分布在每个联通块的最远点对上。 ~~~~~~一开始,小Z会出生在一个有宝箱的房间,然后他走到有另外一个宝箱的所在地,接着系统把他送到另一个联通块的某个宝箱处,然后小Z走到最后一个宝箱处,就通关了。 ~~~~~~小Z想知道他最多会走多少距离。

Four's 1738

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7323

Jzoj4727 挺进

题意:给你一颗树,要求断掉一条边,使得剩下两个联通快的直径之和最大 一看就是树形DP嘛,c1表示最长边c2次长,f表示父亲部分的最长路 上面做法不讲,我们讲一种比较新奇的方法 假设我们枚举断哪一条边,在lgn时间内求出两个联通快的直径不就行了嘛 怎么做呢,我们发现,可以用树的dfs序来维护,我们用一个线段树维护一个区间内的直径的端点和长度 额,如何合并? 我们假设两块的直径端点分别为x

扩展の灰(Extended Ash/Cooevjnz) 756

Transformer 在自动驾驶中的应用:深度对比特斯拉(Tesla)、小鹏(XNet)、华为(ADS 2.0)在 Transformer 架构应用上的异同

自动驾驶汽车是当前人工智能和机器学习领域的热点研究方向之一。其核心技术之一就是基于深度学习的感知和决策系统。在感知系统中,目标检测和跟踪、语义分割、场景理解等计算机视觉任务至关重要。而在决策系统中,规划和控制模块需要对当前状态进行建模并做出相应的决策。近年来,Transformer模型在自然语言处理领域取得了突破性进展,并逐步被应用到计算机视觉等其他领域。相比于传统的卷积神经网络和循环神经网络,Transformer模型具有建模长距离依赖关系的能力,可以更好地捕捉输入序列中的全局信息。

AI天才研究院 864

点云生成图像

摘要:本文介绍了使用Open3D库将点云投影为RGBD图像的方法。通过project_to_rgbd_image函数,利用小孔相机模型的内参和外参矩阵,实现了点云到彩色图像和深度图的转换。实验使用随机生成的10万个点云数据,通过可视化窗口获取相机参数后,成功生成了对应的RGB图像和深度图像,并使用Matplotlib进行可视化展示。该方法为点云数据处理提供了有效的三维到二维投影方案。

夜空中明亮的星的专栏 134

JZOJ4727. 挺进

题目大意 给定一棵n个点的树,每条边有边权。现在选择一条边将它删除,得到两个联通块,要求最大的联通块直径之和是多少。 Data Constraint n≤100000

Akakii的博客 820

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 564

【挖坑记】JZOJ 4727 挺进

题目大意一棵树,求出随机断一条边后,两个联通块直径和的最大值。 n<=100000,边长<=100000 时间限制 1s 空间限制 256M解题思路对于树上每一个点,预处理出以下数据: 1、每棵子树的根节点到叶节点的最大值、次大值和第三大值d1,d2,d3; 2、每棵子树内直径长度f; 3、每棵子树的子结点中f[son]的最大值和次大值; 4、这个点与该子树以外的点的距离dist的最大

baidu_34015648的博客 552

QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)

一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.youkuaiyun.com/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..

7658

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【JZOJ B组】删边

Description   给出N个点,N-1条边的连通图.   现要求删除一条边,使得连通块的直径总和最大.所谓连通块的直径是指连通块中最远两点之间的距离。      问:直径总和最大是多少? Input   文件名为 delete.in   第一行正整数N.   接下来N-1行.每行两个数,A,B,LEN表示A,B(1&lt;=A,B&lt;=N)有一条长度为Len(1&lt...

Brute♂force 913

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【jzoj 4727】【NOIP2015模拟10.28B组】终章-剑之魂 {贪心}

题目 Description 【背景介绍】 古堡,暗鸦,斜阳,和深渊…… 等了三年,我独自一人,终于来到了这里…… “终焉的试炼吗?就在这里吗?”我自言自语道。 “终焉的试炼啊!就在这里啊!”我再一次自言自语道。 “这背后可能有那个东西吗?”我自言自语道。 “这背后一定有那个东西呢!”我又一次自言自语道。 我沉默着,踏上黑漆漆的索桥,小心翼翼地,拿出锋利的注入我灵魂的双剑…… ...

Nowed 549

OV9734 DATASHEET,完整规格书

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

UVALive 4727

约瑟夫环的问题。 题目给你n,k。n即约瑟夫环的长度,k是淘汰掉从当前开始数的第k个人,然后问你被淘汰的最后三个人是谁。   逆向思维。如果某个人A是最后被淘汰掉的,当最后只剩下一个 人(即A)时,A一定是在0位置(我们从0位置开始,方便取余运算)。那么当只剩下两个人时,A

1080

[JZOJ5515] 送你一朵圣诞树

Description 给出一棵树(不超过10个点可以作为根),每个点有一个权值a 要求按照某一个顺序选完所有点,一个点必须在父亲选完以后才能选,i号点在第j个被选对答案的贡献为a[i]*j 求最大的答案 Solution 考虑贪心 假如当前先选一个点是最优的,那么一定在选完它的父亲以后立即选它,那么可以将它与父亲缩在一个并查集里,并且答案加上父亲的联通块大小乘上儿子(可以是个联通

Never give in. 911

【JZOJ4587】Snow的追寻 题解

题目大意      ~~~~~~有一棵有 n 个节点的根节点为 1 的树,他只能走一条不经过重复节点的路径。       ~~~~~~给出 q 个形如“x y”的询问,表示他不能走到 x 和 y 的子树中。现在他想知道对于每组询问,他能走的最长路径是多少,如果没有,输出0。       ~~~~~~n, q<=10^5【显然】      ~~~~~~可走的地方还是一棵树,而我们要求的路径就是这棵

Four's 1906

[JZOJ5134][SDOI省队集训2017]三元组

题目大意求∑ai=1∑bj=1∑ck=1[(i,j)=1][(i,k)=1][(j,k)=1]\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^c[(i,j)=1][(i,k)=1][(j,k)=1]推式子首先假设a<=b<=c。 第一步转化为 ∑ai=1∑bj=1,(j,i)=1∑ck=1,(k,i)=1[(j,k)=1]\sum_{i=1}^a\sum_{j=1,(j,i

不来也不去的一只失忆蝴蝶 969

JZOJ 5746. 和

检查每一个乘号,如果模数小于等于1e18那么可以不用快速加了

Luckfort 632
上一篇: 根号分治
下一篇: 高精度模板
graygoods
博客等级 码龄8年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值