【解题报告】Tree Destruction CodeForces - 911F(搜索??)

【生产实践】SSH服务弱加密算法修复指南(附完整操作流程) SSH服务弱加密算法漏洞修复方案 检测发现SSH服务存在支持弱加密算法漏洞,主要风险包括: 使用arcfour、aes128-cbc等易被破解的算法 面临密钥恢复、重放攻击等安全威胁 提供两种修复方案: 推荐方案:升级OpenSSH至最新版本 替代方案:修改SSH配置禁用弱算法(需注意可能影响旧客户端连接) 修复步骤: 编辑/etc/ssh/sshd_config 注释或删除弱算法配置 添加强加密算法(如aes128-ctr等) 重启SSH服务 注意事项: 建议先在测试环境验证 可能需配合客户端升级 操作前 阅读详情

【解题报告】Tree Destruction CodeForces - 911F(搜索??)

====================================================================

【cf链接】

【vj链接】

======================================================================

题目

You are given an unweighted tree with n vertices. Then n - 1 following operations are applied to the tree. A single operation consists of the following steps:

  1. choose two leaves;
  2. add the length of the simple path between them to the answer;
  3. remove one of the chosen leaves from the tree.
    Initial

Obviously after n - 1 such operations the tree will consist of a single vertex.

Calculate the maximal possible answer you can achieve, and construct a sequence of operations that allows you to achieve this answer!

Input

The first line contains one integer number n (2 ≤ n ≤ 2·105) — the number of vertices in the tree.

Next n - 1 lines describe the edges of the tree in form ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi). It is guaranteed that given graph is a tree.

Output

In the first line print one integer number — maximal possible answer.

In the next n - 1 lines print the operations in order of their applying in format ai, bi, ci, where ai, bi — pair of the leaves that are chosen in the current operation (1 ≤ ai, bi ≤ n), ci (1 ≤ ci ≤ n, ci = ai or ci = bi) — choosen leaf that is removed from the tree in the current operation.

See the examples for better understanding.

Examples

input

3
1 2
1 3

output

3
2 3 3
2 1 1

input

5
1 2
1 3
2 4
2 5

output

9
3 5 5
4 3 3
4 1 1
4 2 2

====================================================================

题目大意

有棵树,按照某规律删除结点并得到一个值。
某规律:找俩点,删掉其中一个
一个值:每次操作找的那俩点的距离

样例输入

第一行:一个n,表示树上有几个点
第2-n行:两个数x,y,表示一条边

输出

第一行:刚刚说的那一个值
第2-n行:三个数x,y,z,x,y表示一条边,z表示删除的那个点

====================================================================

解题思路

如果已经有一条路径(直径)是最长的,那其他点的最长路径一定是到达直径的端点的

假设这两个点叫p1,p2
要求的一个值叫ans

  • 步骤一:找到最长路径(两次dfs)

(从一个点出发,找到它的最长路径,那另一个点一定属于直径的端点)

  • 步骤二:除最长路径上的点全部删掉
  • 步骤三:删掉直径

(步骤二三通过分别从p1,p2遍历得到长度dis[i],dis2[i],用d[i]表示在直径上的某点离p2的距离,然后遍历一次,回溯时删除)
(求ans的过程在遍历之前,直接加d[i]或dis[i]或dis2[i]即可)

===================================================================

AC代码

不建议看这个代码,太乱了,幸好是1A,不然都不知道怎么改……

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#define LL long long
#define maxn 200007
using namespace std;

vector <int> edge[maxn];
int dis[maxn],vis[maxn],d[maxn],p1,p2,dis2[maxn],print[maxn];//print是方便输出的,不影响做题
void dfs1(int x)//求x到各点的距离存在dis数组里
{
    for(int i=0;i<edge[x].size();i++)
    {
        if(!vis[edge[x][i]])
        {
            vis[edge[x][i]]=1;
            dis[edge[x][i]]=dis[x]+1;
            dfs1(edge[x][i]);
        }
    }
}
void dfs3(int x)//求x到各点的距离存在dis2数组里
{
    for(int i=0;i<edge[x].size();i++)
    {
        if(!vis[edge[x][i]])
        {
            vis[edge[x][i]]=1;
            dis2[edge[x][i]]=dis2[x]+1;
            dfs3(edge[x][i]);
        }
    }
}
int dfs2(int x)//求x到直径上各点的距离,存在d数组里
{
    if(x==p2) return d[x]=1;
    for(int i=0;i<edge[x].size();i++)
    {
        if(!vis[edge[x][i]])
        {
            vis[edge[x][i]]=1;
            if(dfs2(edge[x][i]))
            {
                d[x]=d[edge[x][i]]+1;
                return 1;
            }
        }
    }
    return 0;
}
int dfs4(int x)//输出除直径外的点
{//printf("A");
    for(int i=0;i<edge[x].size();i++)
    {//printf("B");
        if(!vis[edge[x][i]])
        {
            vis[edge[x][i]]=1;
            dfs4(edge[x][i]);
            if(d[edge[x][i]]==0)
            {//printf("D");
                if(dis[edge[x][i]]>=dis2[edge[x][i]]) printf("%d %d %d\n",p1,edge[x][i],edge[x][i]);
                else printf("%d %d %d\n",p2,edge[x][i],edge[x][i]);
            }

        }
    }
}
int main()
{
    int n,i,j,x,y,maxlen;
    scanf("%d",&n);
    for(i=1;i<n;i++)
    {
        scanf("%d%d",&x,&y);
        edge[x].push_back(y);
        edge[y].push_back(x);
    }
    vis[1]=1;
    dis[1]=0;
    dfs1(1);
    maxlen=-1;
    for(i=1;i<=n;i++)
    {
        if(maxlen<dis[i])
        {
            maxlen=dis[i];
            p1=i;
        }
        vis[i]=0;
    }
    vis[p1]=1;
    dis[p1]=0;
    dfs1(p1);
    maxlen=-1;
    for(i=1;i<=n;i++)
    {
        if(maxlen<dis[i])
        {
            maxlen=dis[i];
            p2=i;
        }
        vis[i]=0;
    }
    //printf("p1=%d p2=%d \n",p1,p2);
    dfs2(p1);
    dis2[p2]=0;
    for(i=1;i<=n;i++)
        vis[i]=0;
    vis[p2]=1;
    dfs3(p2);
    LL ans=0;
    for(i=1;i<=n;i++)
    {
        //printf("%d %d %d\n",dis[i],dis2[i],d[i]);
        if(!d[i]) ans+=max(dis[i],dis2[i]);
        else ans+=d[i]-1,print[d[i]]=i;
    }
    printf("%lld\n",ans);
    for(i=1;i<=n;i++)
        vis[i]=0;
    vis[p1]=1;
    dfs4(p1);
    for(i=1;i<d[p1];i++)
    {
        printf("%d %d %d\n",p1,print[i],print[i]);//print记录的是那条直径
    }
    return 0;
}
假人有限元模型 假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用 立即下载

相关推荐

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

weixin_34640289的博客 143

codeforces911F - Tree Destruction

题面在这里题意:给一棵树,执行n次操作,每次操作流程如下: 1. 选两个叶子节点 2. 将答案加上这两个节点的距离 3. 删去任意一个节点要求最后答案最大。 问最大的答案以及构造出操作步骤。做法:一个简单的想法就是找一个深度最深的叶子,去更新别的叶子。 我们来看具体的情况。假设是下面这张图。红色的点就是深度最深的点,绿色是深度次深的点,且他们是处在根的不同儿子所在的子树。 于是对于最右边

juruo? juruo! 598

西门子S7-1500 PLC模块化编程与生产线自动化实践

PLC(可编程逻辑控制器)作为工业自动化核心设备,其模块化编程技术能显著提升产线控制系统的开发效率。通过SCL高级语言实现算法封装、功能块(FB)复用等工程实践,可构建稳定可靠的分层式控制架构。本文以西门子TIA Portal平台为例,详解S7-1500系列PLC在汽车零部件产线中的标准化应用方案,包含配方管理、设备联动等典型场景的SCL实现,以及Profinet通信、虚拟轴同步等进阶技巧。特别适用于需要快速实施中大型生产线自动化改造的工程师,提供经过验证的异常处理机制和模块化设计规范。

weixin_34341229的博客 459

codeforces 911 F. Tree Destruction

题目链接 题意: 给定一棵树,每次可以选定树上的两个叶子,并删去其中的一个。答案每次加上两个选定的叶子之间的距离。求最后答案的最大值。 思路 首先,距离树上的任意一个节点最远的节点一定是某条直径的某个端点。 首先求出树的某一条直径,令其端点分别为L, R。把L看成树的根,那么R一定是叶子结点。对于那些非直径上的点,离他们最远的点肯定是L或R中的一个(可能也有其他的,但是L或R肯定已经最大...

flyzer的博客 369

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 358

STM32H7串口DMA避坑指南:如何解决RT-Thread默认驱动不支持的问题

本文针对STM32H7在RT-Thread系统中启用串口DMA时遇到的驱动不支持问题,提供了详细的解决方案。通过分析问题根源,指导修改驱动代码以适配H7的DMA Stream架构,并调整内存配置确保DMA可访问性,最终实现稳定高效的串口DMA通信。

weixin_29179311的博客 424

Tree Destruction codeforces 911F

题目大意:给出一棵树,进行n-1次操作。每次操作包括找两个点,距离加到ans中,再删除其中一个点,n-1次操作后将只剩1个点,求最大ans。题解:先求出树的直径,两个端点为p1、p2,操作分2种。第一种,删除非直径上的点(a、b、c),如图                            操作时,选择的点对为{a,max(p1,p2)},max(p1,p2)表示a到p1,p2距离最大的点,删...

Spy97的博客 412

自适应滤波算法综述

自适应滤波算法综述

xdzhujy的博客 5万+

Codeforces 911F Tree Destruction(贪心 && 树的直径)

题目链接Tree Destructi 题意 给定一棵树,每次可以选定树上的两个叶子,并删去其中的一个。答案每次加上两个选定的叶子之间的距离。   求最后答案的最大值。 首先求出树的某一条直径,令其端点分别为L, R。 把L看成树的根,那么R一定是叶子结点。 对于那些非直径上的点,离他们最远的点肯定是L或R中的一个(可能也有其他的,但是L或R肯定已经最大了) 所以依次把这些非...

weixin_30912051的博客 170

踩遍Windows所有坑:Codex CLI桌面端+命令行双环境安装避坑实战

Windows下装Codex CLI的坑,本质上都是Windows本身的路径、环境变量、权限、编码这些历史遗留问题,和工具本身关系不大。只要避开中文路径、正确配置PATH、注意终端环境差异,其实安装非常简单。这套双环境方案配好之后,桌面端适合可视化调试、多会话管理,终端适合嵌入编辑器、脚本调用,一套配置两边通用,体验还是很流畅的。按照上面的流程走,基本不会出大问题,就算出问题也能在排查表里找到对应解法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 300

置顶必读(3) |《滚雪球学SpringBoot》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 15万+

[Codeforces 911F] Tree Destruction 解题报告(贪心)

题目链接: http://codeforces.com/contest/911/problem/F 题目大意: 给你一棵树,每次挑选这棵树的两个度数为1的点,加上他们之间的边数(距离),然后将其中一个点去掉,问你边数(距离)之和最大可以是多少. 要求输出每次选择的两个点和删掉的点 题解: 贪心题,策略是每次选择一个度数为1的点和距离它较远的直径的端点(显然直径的端点度数为1),然后把这...

weixin_30480651的博客 198

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 110

Codeforces 911F Tree Destruction

Tree Destruction 先把直径扣出来, 然后每个点都和直径的其中一端组合, 这样可以保证是最优的。 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL&g...

weixin_30236595的博客 105

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Educational Codeforces Round 35 F. Tree Destruction 树的直径

题目链接: https://codeforces.com/contest/911/problem/F 题意: 做法: 代码 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) #define rep_e(i,u,v) for(int i=head[u],v=to[i];~i;i=nex[i],v=to[...

人生如戏 238

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Educational Codeforces Round 35 (Rated for Div. 2) F. Tree Destruction(dfs)

题目链接:http://codeforces.com/contest/911/problem/F 策略就是先删除非直径的点,然后删除直径上的点,dfs就行 代码: #include #define pb push_back using namespace std; typedef long long ll; const int MAXN=2e5+5; struct edge

bibibibi的博客 244

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

CF911F Tree Destruction(树的直径)

Problem - F - Codeforces 题意: 给一棵树,每次加上两个叶节点的距离并删除其中一个叶节点,问最大总距离和是多少。 题解: 叶节点的最大距离肯定是直径两端的距离;那么直径之外的点与其他节点的最远距离肯定在直径的某一端。那么我们首先把直径和其两端点求出来,再加上此节点到那个端点的距离;这个距离可用两个dfs 求直径端点时顺便求出;再考虑直径上的点,每次删掉一端的点就好了,sum+=; /*keep on going and never give up*/ #include&l

qq_62539009的博客 461

[CF911F]Tree Destruction

题目大意:给你一棵树,每次挑选这棵树的两个叶子,把答案加上他们之间的距离,然后将其中一个点去掉,问你距离之和最大可以是多少。要求输出方案 题解:求出直径和直径上的点,因为树上一个点可以提供的最大贡献为它到直径中的一个端点的距离,于是把不在直径上的点先删去(注意要按深度一个个删,因为要求删叶子)。 卡点:1.没有按深度从大到小删,删除了非叶子节点   2.爆$long\;long$ C...

weixin_33753845的博客 224

D. Destruction of a Tree

D. Destruction of a Tree time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a tree (a graph withnvertices andn - 1e...

black_horse2018的博客 208

Codeforces.911F.Tree Destruction(构造 贪心)

题目链接 \(Description\) 一棵n个点的树,每次可以选择树上两个叶子节点并删去一个,得到的价值为两点间的距离 删n-1次,问如何能使最后得到的价值最大,并输出方案 \(Solution\) 树上距离,求最大,可以考虑下树的直径 假如已知树的直径u->v,那么任意一点x到达其他点的最远距离就是u,v中一点(如果不是这样,那直径一定可以更长而不是uv) 假设x距u最远,那肯定是删x...

weixin_30888413的博客 169

Destruction of a Tree (dfs+思维)

Destruction of a TreeYou are given a tree (a graph with n vertices and n - 1 edges in which it's possible to reach any vertex from any other vertex using only its edges).A vertex can be destroyed if t...

codeswarrior的博客 466

codeforce 911F

传送门:http://codeforces.com/problemset/problem/911/F题意: 给你一棵树,每次选两个点,答案加上这两个点的距离,然后删除其中一个点,重复直到只剩下一个点,求最大的答案及每次的操作 题解: (1)树的直径:树上最长的简单路径即为树的直径 (2)选择一个在直径外的点,与它距离最远的点一定是直径的两个端点之一 (3)每次从直径外找一个点,直

u011237384的专栏 345

G. Tree Destruction 【Codeforces Round 991 (Div. 3)】

Codeforces Round 991 (Div. 3) G. Tree Destruction DFS及其变种(dfs and similar)动态规划(dp)树形结构(trees)

csdn可能自动偷偷把博客设为vip可见,可以联系我改回去 382

Destruction of a Tree CodeForces - 964D

题面题意给出一棵树,你可以摧毁其中度数为偶数的点,同时与之相连的点将被一起摧毁,问能否摧毁所有点,若能,还要输出方案.做法首先可以发现点数为偶数的肯定不行,因为每次删除偶数条边,因此对于一对父子,若子节点的字子树大小为奇数,则肯定先摧毁其父节点再摧毁它,反之先摧毁其父节点再摧毁它,我们可以据此得出父子间的先后关系,再进行拓扑排序即可得出答案.代码#include<iostream> #include

yzyyylx的博客 814

Codeforces 911F 贪心

分析:先求出树的直径,以这个直径上的节点作为主干。 假设两个端点分别为x,y,求其他任意叶子节点z到另一个叶子节点的最长距离即为max{ d(x,z), d(y,z) } 该解法的正确性我无法给出证明,但画图看看应该就不难理解的。 代码如下: #include #include #include using namespace std; typedef long long LL;

勇敢前进的ACMer 1175

CF911F Tree Destruction (树的直径,贪心)

题目链接 Solution 1.先找出树的直径. 2.遍历直径沿途的每一个节点以及它的子树. 3.然后对于每个非直径节点直接统计答案,令直径的两个端点为 \(x_1,x_2\) . \[Ans=\sum{Max(dis(i,x1),dis(i,x2))}\] 最后再单独把直径拎出来,单独统计一次就好了. 正确性证明: redbag 一句话解决: 如果说这其中的某个答案不是最优,那么找的直径不就是...

weixin_30772105的博客 160
上一篇: 最长递增子序列
下一篇: 【模板】Dijkstra \ Floyed \ Prim
xuziling_
博客等级 码龄9年 1粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值