hdu 6035 Colorful Tree

HDU 6035 Colorful Tree 树上统计 联通块 地址http://acm.hdu.edu.cn/showproblem.php?pid=6035题意树上每个节点有一种颜色ci(1<=ci<=n)c_i (1 <= c_i <= n),2<=n<=2∗1052 <= n <= 2 * 10^5,每个点对的路径值为这个路径上的颜色种数,求树上所有路径(n∗(n−1)/2n * (n - 1) / 2条路径)的长度和思路直接计算每个颜色对答案的贡献自己 阅读详情

Colorful Tree

题目

题意
给定一颗树,再给定树上每一个节点一个颜色,求树上总共n(n-1)/2条路径每条路径上不同颜色数的总和。

做法
首先,

总和=总路径数∗颜色数−∑每一种颜色没参与的贡献
.

对于某一个id节点来说,算没参与贡献,可以通过求其最高同色子节点,以这些节点和其子树节点与id形成的路径必然会有重复id节点的颜色,即id节点对这些路径没有贡献。
也就是求对于id节点这个颜色来说,它的同色子节点对其子树节点造成的最大“截断”数量。
最后还要减去所有颜色剩下的连通块。

#include <bits/stdc++.h>

using namespace std;
const int maxn = 200005;
typedef long long ll; 
int n;
int c[maxn],T,tot;
int size[maxn];
bool vis[maxn];
ll ans;
vector<int> e[maxn];
ll s[maxn];

void dfs(int id,int fa){
    size[id]=1;
    ll son=0;
    for(auto ep:e[id]){
        if(ep==fa) continue;
        ll last = s[c[id]];
        dfs(ep,id);
        size[id] += size[ep];
        ll add = s[c[id]] - last;
        ans -= (ll)(size[ep] - add) * (size[ep] - add - 1LL) / 2LL;
        son += size[ep] - add;
    }
    s[c[id]] += son + 1;
}

int main(){
    freopen("input.txt","r",stdin);
    int T=1;
    while(~scanf("%d",&n)){
        for(int i=0;i<=n;i++)
            e[i].clear();
        memset(vis,0,sizeof vis);
        memset(s,0,sizeof s);
        ll cnt = 0;
        for(int i=1;i<=n;i++){
            scanf("%d",&c[i]);
            if(!vis[c[i]]) cnt++;
            vis[c[i]]=1;
        }
        for(int i=1;i<n;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            e[u].push_back(v);
            e[v].push_back(u);
        }
        ans = (ll)n * (n-1LL) / 2LL * cnt;
        dfs(1,0);
        for(int i=1;i<=n;i++){
            if(!vis[i]) continue;
            ans -= (ll)(n - s[i]) * (n - s[i] - 1LL) / 2LL;
        }
        printf("Case #%d: %lld\n",T++,ans);
    }
    return 0;
} 
Cadence创建异形焊盘教程(详细操作) 背景:一些常见的矩形/圆形焊盘,设置参数就可。碰到非规则的一些焊盘,那只能用Cadence Allegro PCB来画咯。 一、新建图形 【File】——>【New…】 弹出如下窗口,选择绘制的类型Shape symbol、路径,输入名字 二、设置参数 【Setup】——>【Design Parameters…】 Enhanced display modes:增强型显示模型。全部勾选上。 在【Design】设置单位为mm 设置偏移量(-50,-50) 三、绘制图形 1、找到原点,即参考 阅读详情

相关推荐

STM32实战:电容触摸屏I2C转USB HID设备全解析

本文详细解析了基于STM32的电容触摸屏I2C转USB HID设备实现方案。通过硬件选型、协议分析和代码实现,展示了如何将GT911触摸屏数据转换为标准USB HID协议,并提供了关键调试经验与性能优化技巧,为智能家居控制面板等应用提供高性价比解决方案。

weixin_42548829的博客 320

HDU-6035 Colorful Tree(dfs序造树)

题意; 每条路径的权值是:路径上经过的不同颜色节点的个数。 询问各个点互达后的路径权值总和 思路: 看了小半天才看懂。。。 首先解释下官方题解的意思。 对于所求的问题,可以转化为每种颜色对于答案可以贡献多少次值(颜色i对于在所有路径中出现了几次)。 颜色i贡献次数=所有路径-路径中未出现颜色i的路径条数。 之后把所有的颜色i相加即可。 代码中;siz表示以当前节点为根,子树大小

GameRoad 1027

SGLang HiCache实战:手把手教你配置KV Cache Offload,让大模型推理成本直降84%

本文详细介绍了SGLang HiCache在KV Cache Offload配置与调优中的实战应用,通过多级存储架构和智能卸载策略,显著降低大模型推理成本达84%。文章涵盖HiCache架构优势、环境配置、高级调优策略及生产环境最佳实践,帮助开发者优化GPU显存使用,提升并发处理能力。

weixin_29044713的博客 462

HDU 6035 Colorful Tree(树形dp)

题目:点击打开链接 题意:给n个点,每个点有一个颜色值c[i],给n-1条边,保证能够连成一个树。定义树上每两个点间的距离为这两点间的颜色种类数,求整棵树的所有路径长度和,路径总数为n*(n-1)/2 思路:要求总路径长度和,即求每条路径上颜色的种数的和,可以通过求每种颜色不在某一条路径上的和=ans,最后用路径总数*颜色总数-ans得到最终答案。具体点就是用vector容器存边,对于树上的一

Code change the World. 308

PICO4 VR开发调试神器:用Live Preview Plugin实现电脑串流,告别反复打包烧录的繁琐流程

本文详细介绍了PICO4 VR开发中如何使用Live Preview Plugin实现电脑串流,显著提升开发效率。通过实时预览和调试功能,开发者可以避免反复打包烧录的繁琐流程,特别适用于Unity环境下的VR应用开发。文章涵盖环境配置、连接设置、实时调试技巧及性能优化方案,是PICO4开发者的必备指南。

weixin_34110970的博客 418

STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册

摘要: 本文针对STM32嵌入式开发中LwIP TCP通信的高延迟问题(默认配置下延迟达10~20ms),提出纯软件优化方案,通过调整内存配置与TCP参数将延迟降至1ms。核心问题包括内存池不足、pbuf分配低效及Nagle算法拖累,优化步骤包括: 内存池扩容:增大MEMP_NUM_TCP_PCB至10、PBUF_POOL_SIZE至32,避免资源竞争; pbuf静态池分配:采用2048字节大块缓冲区匹配DMA传输,减少分块与拷贝; 关闭Nagle算法:设置TCP_NODELAY=1,禁用延迟确认以加速小包

weixin_42212753的博客 1708

HDU6035:Colorful Tree(树形DP)

传送门 题意 给出一棵最小生成树及每个节点的颜色,询问\(\frac{n(n-1)}2\)条路径的权值和,一条路径的权值为该路径的颜色种数 分析 勉强理解了ftae的做法,但是代码还是不太会,还是太弱了(⊙﹏⊙)。 基本思想:求出每种颜色经过的路径数。 做一定转化:总路径数-每种颜色未经过的路径数 那么未经过的路径数如何求呢?借用虚树的思想,对于颜色c[i],将颜色为c[i]的节点从树上...

anquan1533的博客 225

伪距单点定位算法原理以及利用最小二乘法计算实例

即该公式:建立下列代价函数满足最佳估值的条件为:即:可解得未知参数 X 的最佳估值由于每个可见卫星观测量的精度可能不一样,这时,需要对不同观测量赋予一个权重系数,称为加权。

qq_43381998的博客 1万+

HDU - 6035 - Colorful Tree(树形dp)

题目链接:HDU - 6035 - Colorful Tree(树形dp)先贴一个巨佬博客 hdu_6032:Colorful Tree (2017 多校第一场 1003) 【树形dp】 - wy_2016 - 博客园 题意:一条链的权值定义为链上颜色的数量,求给定的树中所有不同链的权值之和。 一种颜色对答案的贡献为包含这种颜色的链的条数。因此可以对每种颜色求不包含这种颜色的链的条数。 sum

On the way 666

Word公式一键转MathType保姆级教程(附omml2mml.xsl报错终极解决方案)

本文提供Word公式一键转MathType的保姆级教程,重点解决常见的omml2mml.xsl报错问题。通过详细分析报错原因、官方解决方案实操步骤及转换后格式优化技巧,帮助用户高效完成公式转换,适用于科研论文和商业文档编辑。

weixin_30082367的博客 554

【OpenFOAM】-olaFlow-算例6- waveFloatingObject

波浪作用下的浮体的刚体运动,属于流固耦合(FSI)问题

ou_no的博客 3538

HDU 6035 Colorful Tree(虚树)

Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 443    Accepted Submission(s): 155 Problem Description There is a t

yasolx的博客 2226

Arcgis中的模型构建器技术之按属性批量建库并对应输出

好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。

weixin_44671081的博客 518

HDU 6035 colorful tree

题目链接HDU 6035 colorful tree分析参考首先,我们单独考虑每种颜色,对于颜色 cc  来说,他对答案的贡献就是包含这种颜色的路径条数,反过来想就是 n∗(n−1)/2−(不经过这种颜色的路径条数)n*(n-1)/2 - (不经过这种颜色的路径条数),怎么求呢?我们以颜色 cc 来对树分块,那么 就是用总路径条数 n∗(n−1)/2n*(n-1)/2 剪掉 每一块的路径数目.不过我

taotao 的大学墓志 633

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

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

HDU6035 Colorful Tree

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 【题意】给定一棵有n个节点的树,ci表示节点i的颜色。任意两个节点间存在一条路径,该路径的权值为路径上不同颜色节点的数量,求解所有路径权值的和。 【分析】比赛期间想要通过数分治对答案进行求解,无奈发现始终无法完成对路径具体数值的快速统计和避免同色记重。赛后看了

dDarkdawn的博客 434

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【HDU6035】 Colorful Tree

题目的意思是:给定一个点带颜色的树,两点之间的距离定义为路径上不同颜色的个数。求所有点对间的距离和。 做法有点分治,还有传说中的虚树DP,树上差分。 点分治法:   考虑每个点的贡献,可以发现一个点的子树大小就是这个点的贡献。那么,对于同一个根的另一个子树的一个点x,去掉x到根结点对应颜色的贡献,再加上x到根结点上的颜色的种类数目,就是这个x点的答案。我们具体做的时候,是先不考虑根结点的,根...

weixin_30555515的博客 219

HDU 6035 Colorful Tree

【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=6035题目意思给你n个点,每个点都会用一个数字代表一种颜色,之后给你(n-1)相连的条路,问你n总共形成的n*(n-1)/2条路每路经过的颜色的个数的总和(1到2,2到3,1到3是3条路。所以n个点能形成n*(n-1)/2条路)解题思路首先题目意思可以转化成每种颜色经过的路的条数总和,有可以转化成全部的

绝丶爵的博客 400

[HDU]-6035 Colorful Tree

URL : http://acm.hdu.edu.cn/showproblem.php?pid=6035给出 nn 个点的树和各点颜色,n<2⋅105n<2\cdot 10^5求所有点与点 n(n−1)2\frac{n(n-1)}{2} 条路径上不同颜色数量的和#include<stdio.h> typedef long long LL; const int MAXN = 2e5 + 5; int

chutzpah 373

HDU 6035 Colorful Tree [树形dp]

HDU6035 Colorful Tree [树形dp]

ACTerminate的博客 2083

hdu6035 Colorful Tree

题解:这个图构成了一树,单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和。反过来思考只需要求有多少条路径没有经过这种颜色即可。然后没有经过路线的条数就是以这个颜色为边界构成联通块能够组成的路径数目,路径数目就是联通块个数*(联通块个数-1)/2而这个点到下面结点的联通块个数就是这个颜色子节点为根的个数减去下面跟这个颜色一样的节点并且以这个节点为根树的节点个数总和 如何求下面代

Soul 416

Hdu-6035 Colorful Tree(dfs)

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 375    Accepted Submission(s): 126 Problem Description There is a tree with n node

WZJRJ28 1047
上一篇: “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛
下一篇: hdu 6047 Maximum Sequence
RedPolya
博客等级 码龄10年 13粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值