Codeforces Round #359 (Div. 2) D. Kay and Snowflake

D. Kay and Snowflake

time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

After the piece of a devilish mirror hit the Kay’s eye, he is no longer interested in the beauty of the roses. Now he likes to watch snowflakes.

Once upon a time, he found a huge snowflake that has a form of the tree (connected acyclic graph) consisting of n nodes. The root of tree has index 1. Kay is very interested in the structure of this tree.

After doing some research he formed q queries he is interested in. The i-th query asks to find a centroid of the subtree of the node vi. Your goal is to answer all queries.

Subtree of a node is a part of tree consisting of this node and all it’s descendants (direct or not). In other words, subtree of node v is formed by nodes u, such that node v is present on the path from u to root.

Centroid of a tree (or a subtree) is a node, such that if we erase it from the tree, the maximum size of the connected component will be at least two times smaller than the size of the initial tree (or a subtree).
Input

The first line of the input contains two integers n and q (2 ≤ n ≤ 300 000, 1 ≤ q ≤ 300 000) — the size of the initial tree and the number of queries respectively.

The second line contains n - 1 integer p2, p3, …, pn (1 ≤ pi ≤ n) — the indices of the parents of the nodes from 2 to n. Node 1 is a root of the tree. It’s guaranteed that pi define a correct tree.

Each of the following q lines contain a single integer vi (1 ≤ vi ≤ n) — the index of the node, that define the subtree, for which we want to find a centroid.
Output

For each query print the index of a centroid of the corresponding subtree. If there are many suitable nodes, print any of them. It’s guaranteed, that each subtree has at least one centroid.
Example
Input

7 4
1 1 3 3 5 3
1
2
3
5

Output

3
2
3
6

题意

定义一棵树的重心为树上的一个节点,如果删除这个节点,分开的几个部分中,最大的节点数小于等于原树的1/2。
现在给定一棵树,有q个询问,问树上某点的重心是谁

思路

q数量很大,所以肯定是预处理出每个节点的重心,然后o(1)查询。
对于重心应该有这样一个结论:设节点v上最大的子树的重心为u,那么v的重心一定出现在路径uv上。
那么我们可以通过dfs遍历每个节点,当前节点依次判断路径uv上的每个点,找到满足重心要求的即可。

代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

struct point
{
    int v,f,l,numson,maxson;
    vector<int>son;
}p[300010];

int dfs(int n)
{
    p[n].l=p[n].son.size();
    if (p[n].l)
    {
        int be,a,b=0;
        for (int i=0;i<p[n].l;i++)
        {
            a=dfs(p[n].son[i]);
            p[n].numson+=a;
            if (p[n].maxson<a) 
            {
                be=p[p[n].son[i]].v;
                p[n].maxson=a;
            }
        }
        p[n].numson++;
        do
        {
            int ok=1;
            if (p[be].maxson*2>p[n].numson) ok=0;
            if (p[be].numson*2<p[n].numson) ok=0;
            if (ok)
            {
                p[n].v=be;
                break;
            }
            be=p[be].f;
        }while (be!=p[n].f);

    }
    else
    {
        p[n].v=n;
        p[n].numson++;
    }
    return p[n].numson;
}



int main()
{
    int n,q,x;
    scanf("%d %d",&n,&q);
    for (int i=2;i<=n;i++)
    {
        scanf("%d",&x);
        p[x].son.push_back(i);
        p[i].f=x;
    }   
    dfs(1);
    for (int i=1;i<=q;i++)
    {
        scanf("%d",&x);
        printf("%d\n",p[x].v);
    }
}
内容概要:本文详细介绍了水中有限长加肋圆柱壳体振动和声辐射的近似解析解,并提供了完整的Python实现。文中首先阐述了问题背景,即加肋圆柱壳体作为水下航行器的主要结构形式,肋骨的作用被简化为只有法向力。接着,通过一系列关键方程(如模态振动速度方程、壳体机械阻抗、特征矩阵元素等),推导出加肋圆柱壳体的振动和声辐射特性。Python代码部分实现了这些理论,包括定义`CylindricalShell`类来封装所有计算功能,如初始化参数、机械阻抗、辐射阻抗、肋骨阻抗、模态速度、辐射功率和辐射效率的计算。此外,还扩展了带刚性圆柱障板的圆柱壳体类`CylindricalShellWithBaffle`,并引入了集中力激励、简支边界条件和低频段计算的内容。最后,通过具体示例展示了如何创建壳体对象、设置参数、计算频率响应以及绘制结果图表,验证了加肋对辐射声功率和声辐射效率的影响。 适合人群:具备一定编程基础和声学基础知识的研究人员、工程师,特别是从事水下声学、船舶工程和振动分析领域的专业人员。 使用场景及目标:①通过代码实现和理论推导,深入理解加肋圆柱壳体的振动和声辐射特性;②分析肋骨对壳体声学性能的影响,优化结构设计;③利用Python代码进行数值模拟,评估不同参数配置下的声辐射效率和功率;④为实际工程项目提供理论支持和技术参考。 其他说明:本文不仅提供了详细的数学推导和Python代码实现,还讨论了实际应用中的注意事项,如参数调整、高频模态考虑、肋骨模型细化和数值稳定性处理。建议读者结合实际需求,灵活运用文中提供的理论和代码,进行更深入的研究和实践。
内容概要:本文详细介绍了使用Python实现灰狼优化算法(GWO)求解CEC2017测试函数的方法。首先,文章解释了GWO的基本概念,即通过模拟狼群的社会行为进行优化。接着,展示了如何安装必要的库并构建GWO的核心类,包括初始化参数、计算适应度以及优化过程中的关键步骤。文中还深入探讨了三个重要的细节:包围机制、随机扰动和位置融合,它们分别对应于算法的探索能力、防止陷入局部最优以及保持种群多样性。此外,作者提供了具体的代码实例,演示了GWO在不同测试函数上的应用,并讨论了针对特定问题的参数调整策略,如改变种群大小、迭代次数和衰减方式等。最后,给出了实用建议,帮助读者更好地理解和应用这一算法。 适合人群:对优化算法感兴趣的科研人员、研究生以及有一定编程基础的数据科学家。 使用场景及目标:适用于解决复杂的连续优化问题,特别是那些具有多个局部极值点的情况。通过学习本文,读者能够掌握GWO的工作原理及其Python实现方法,从而将其应用于各种工程和技术领域的优化任务中。 其他说明:文中提到的一些技巧,如非线性的a衰减策略、改进的位置更新公式和特殊的边界处理方法,对于提高算法性能至关重要。同时,作者强调了在面对不同类型的问题时灵活调整参数的重要性。
内容概要:本文提出了一种基于校准信息传输的实时跨平台神经视频编解码器。针对现有神经视频编解码器在跨平台应用时因浮点运算误差导致解码错误的问题,作者设计了一套校准传输系统,确保编码和解码端的一致性。具体方法包括:1) 通过传输少量校准信息来修正跨平台计算不一致;2) 利用分段高斯约束减少校准信息传输量;3) 引入模型剪枝、运动降采样和算术编码跳过等加速技术,使模型能够在消费级GPU上实现实时解码(约25FPS)。实验结果表明,该方法不仅解决了跨平台解码问题,而且在性能上优于传统H.265编解码器。 适合人群:对视频编解码技术有一定了解的研究人员和技术开发者,特别是关注神经网络编解码器在实际应用中遇到的挑战和解决方案的人群。 使用场景及目标:1) 解决跨平台编解码器因浮点运算误差导致的解码失败问题;2) 实现高效、实时的视频编解码,适用于消费级硬件设备;3) 提供一种无需额外训练即可实现跨平台一致性的新方法,适用于各类视频压缩算法。 其他说明:本文的方法理论上适用于所有使用熵模型和算术编码进行实际传输的编解码方法,有助于加速现有压缩方法的实施。然而,当跨平台计算误差较大时,校准信息的传输量也会显著增加,从而影响率失真性能。未来的工作将进一步优化和推广该方法的实际应用。
这份技术文档聚焦于对比度拉伸算法,这是一种用于图像灰度增强的关键技术。它借助分段线性变换,能够有效提升图像的对比度,让图像细节更清晰,广泛应用于医学影像、摄影、计算机视觉等多个领域。 文档开篇点明对比度拉伸算法的定义,深入剖析其基于分段处理和线性变换来增强图像的核心思想。在算法数学原理部分,详细列出暗部、中间和亮部三个区间的线性变换公式,并阐述各公式对图像灰度调整的具体作用,助力读者理解算法的内在逻辑。 代码实现环节以 Matlab 代码为例,从图像读取与灰度转换、参数设置、分段线性变换到结果显示,逐步解析每一步代码,包括代码的功能以及数据类型转换、逻辑索引等关键操作的目的,方便读者依此进行实践操作。 参数设置与效果分析板块,不仅清晰阐释参数的含义,还深入探讨参数调整对图像效果的影响,同时通过对比原图和拉伸后图像的特点,直观展现算法增强对比度、提升细节辨识度的显著效果。 应用场景与局限性部分,分别列举算法在医学影像处理、摄影与图像处理、计算机视觉预处理中的具体应用,凸显其重要价值;同时客观分析算法存在的参数依赖、细节失真风险以及适用范围有限等问题,为读者在实际应用中提供参考。 文档最后进行总结,强调算法灵活性高、实现简单、效果直观的优势,给出参数调试和组合使用的实践建议,并展望未来在自动化参数优化和与深度学习模型结合方面的发展方向。此外,还提供了参考资料,方便读者进一步深入研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值