首页 > 其他分享 >P3565 [POI2014] HOT-Hotels

P3565 [POI2014] HOT-Hotels

时间:2023-11-13 20:11:05浏览次数:35  
标签:cnt le int POI2014 dep HOT maxn P3565 节点

题目描述:

给定一棵树,在树上选 \(3\) 个点,要求两两距离相等,求方案数。

数据范围:

\(1\le n\le 5000\)
\(1\le a,b\le n\)

思路:

一开始我想的就是枚举两个点,然后处理第三个点。

但是发现这样做非常的不正确,并且非常容易算重,所以我舍去了这种方式。

但是在想这种做法的时候,我们会发现,如果想要使得三个点距离相同,就等于需要找到两个点的路径中点,然后这个中点与三个点的距离相同。

然后我们又又又发现一件事情,如果这个中点被当成了根,显然现在我们选择的三个点只需要深度相同,距离肯定就都相同了。

所以我们不妨枚举这个中点是哪一个点,我们假设这个点为 \(a\)

然后我们以 \(a\) 为根,所有 \(a\) 的子树中每个子树内最多只能有一个被选择的节点,因为如果超过一个,显然 \(lca\) 就不是 \(a\) 了。

问题转换为在同一深度的节点中,每颗子树内最多选择一个节点且一共选择三个节点的方案数。

然后我们思考这个问题怎么处理?

首先我们令 \(f_i\) 表示在遍历当前这棵子树之前的所有子树中,在深度 \(i\) 选择两个点的方案数是多少;\(g_i\) 表示在遍历当前这棵子树之前的所有子树中,在深度 \(i\) 选择一个点的方案数是多少;\(cnt_i\) 表示当前这棵子树深度为 \(i\) 的数量

可以较为轻松的推出转移方程:

\(ans\leftarrow f_i\times cnt_i\)

\(f_i\leftarrow g_i\times cnt_i\)

\(g_i\leftarrow cnt_i\)

时间复杂度 \(O(n^2)\),空间复杂度 \(O(n)\)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5005;
const int inf=0x3f3f3f3f;
int n;
vector<int>G[maxn];
int cnt[maxn],f[maxn],g[maxn];
int mxdep;
void dfs(int u,int f,int dep){
    cnt[dep]++;
    mxdep=max(mxdep,dep);
    for(int v:G[u]){
        if(v==f)continue;
        dfs(v,u,dep+1);
    }
}
void init(){
    for(int i=1;i<=n;i++)f[i]=g[i]=0;
}
signed main(){
    scanf("%lld",&n);
    for(int i=1;i<n;i++){
        int u,v;
        scanf("%lld%lld",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        init();
        for(int j:G[i]){
            for(int _=1;_<=n;_++)cnt[_]=0;
            mxdep=-inf;
            dfs(j,i,1);
            for(int k=1;k<=mxdep;k++){
                ans+=f[k]*cnt[k];
                f[k]+=g[k]*cnt[k];
                g[k]+=cnt[k];
            }
        }
    }
    printf("%lld\n",ans);
    return 0;
}

标签:cnt,le,int,POI2014,dep,HOT,maxn,P3565,节点
From: https://www.cnblogs.com/Candycar/p/17829971.html

相关文章

  • ACS Photonics
                        2014年   第1期                  漏光腔和等离子体纳米谐振器的模式和模式体积柔性聚合物纤维回音壁模式激光的弯曲诱导双向调谐使用等离子增强技术通过手机摄像头进......
  • leetcode hot100-02 字母异位词分组
    题目:字母异位词分组难度:中等地址:https://leetcode.cn/classic/problems/group-anagrams/description/描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。过程:1、首先啥叫......
  • leetcode hot 100-01 两数之和
    题目:两数之和难度:简单题目地址:https://leetcode.cn/classic/problems/two-sum/description/过程一,因为难度是简单,就没有仔细审题,以为返回两个数就好,使用双指针,逻辑如下:对数组排序双指针分别指向头和尾两数之和大于target,尾部指针-1两数之......
  • 解决Few-shot问题的两大方法:元学习与微调
    基于元学习(Meta-Learning)的方法:Few-shot问题或称为Few-shot学习是希望能通过少量的标注数据实现对图像的分类,是元学习(Meta-Learning)的一种。Few-shot学习,不是为了学习、识别训练集上的数据,泛化到测试集,而是为了让模型学会学习。也就是模型训练后,能理解事物的异同、区分不同的......
  • Adobe Photoshop 2023最新激活(附图文教程)
    介绍Photoshop软件是一个非常强大的数字图像处理和编辑软件,具有直观易用的用户界面,各种图像编辑和处理工具,各种图层和蒙版功能,各种滤镜和插件。无论是初学者还是有经验的设计师都可以使用该软件轻松地处理、修改和创建各种类型的图像,以满足不同领域的需求。安装步骤下载地址  htt......
  • android 12 修改Launcher3 app hotseat 图标形状为圆角图标
    1.概述在对11.0产品开发中,对于Launcher3做各种定制化开发,也是常见的,最近有功能需求要求,对于修改图标的形状为圆角图标,而在Launcher3中,所有的app和hotseat都是由BubbleTextView负责构建的,所以对于图标的修改也是要从BubbleTextView.java修改的在这里插入图片描述2.修改Launcher......
  • 如何在PS(photoshop)和AI(illustrator)里快速标注设计图尺寸?
    尺寸标注是大多数设计师必不可少的细节工作,特别是在一些特定的设计图中,标注至关重要。大部分设计大大都直接用CAD标注,其实只需要借助一些小插件,PS和AI也是完全可以直接搞定常见的尺寸标注的。PS-Specs一键尺寸标注 这是一款超级强大的《PS一键尺寸标注工具》,不管是平面图,还......
  • 第五周阅读笔记|人月神话————胸有成竹(Calling the Shot)
    这个章节标题是胸有成竹,而要做到胸有成竹就必须在项目计划阶段我们对项目的预测和估算都需要很准确。因此整个章节的内容就是在讲估算,而估算就涉及到预测和估算模型,估算要做到准确必须通过前期多个历史项目和版本的积累,同时通过历史版本和数据的积累来发现预测指标Y和相应......
  • 论文阅读:Prototypical Networks for Few-shot Learning
    PrototypicalNetworksforFew-shotLearning摘要我们提出了原型网络,用于解决少样本分类问题,在这种情况下,分类器必须对训练集中未见的新类进行归纳,而每个新类只有少量的例子。原型网络学习一个度量空间,在这个空间中,可以通过计算与每个类别的原型表示的距离来进行分类。与最近的少......
  • Adobe Photoshop 2023 最新激活图文方法(亲测有效)
    介绍AdobePhotoshop2023可以创建关于世界上最好的照片,设计师Photoshop使用易于使用的工具和直观的模板将创意世界向前推进。即使是初学者也能创造一些不可思议的东西。Photoshop可以做任何事情,从图像编辑和图像编辑到数字绘图,动画和平面设计。它具有全方位的专业修图工具,具有强大......