cogs 2478. [HZOI 2016]简单的最近公共祖先
2024-09-07 08:30:46
2478. [HZOI 2016]简单的最近公共祖先
★☆ 输入文件:easy_LCA.in
输出文件:easy_LCA.out
简单对比
时间限制:2 s 内存限制:128 MB
【题目描述】
给定一棵有n个节点的有根树,根节点为1,每个节点有一个权值wi,求
即求所有无序节点对的LCA的权值之和。
树的节点编号为1~n,LCA表示两节点的最近公共祖先,即在它们的所有公共祖先中离根节点最远的节点。
【输入格式】
第一行一个整数n,表示节点数。
第二行n个正整数,表示每个点的权值。
以下n-1行每行两个整数x,y,表示树上有一条边连接节点x和节点y。
【输出格式】
一个整数,表示答案。
【样例输入】
3
1 2 3
1 2
1 3
【样例输出】
9
【数据范围与约定】
对于30%的数据,n<=1000。
对于60%的数据,n<=100000。
对于100%的数据,1<=n<=1000000,0<wi<=1000000。
【来源】
HZOI 2016
思路:从数据范围来看,去n^2枚举i,j进行计算lca肯定不行,所以转换思想找规律。
可以发现ans+=w[i]*孩子的数量+子树1*子树2+子树1*子树3+······
错因:数组越界。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 3000000
using namespace std;
int n,tot;
long long ans;
int w[MAXN],size[MAXN],dad[MAXN];
int to[MAXN],head[MAXN],net[MAXN];
void add(int u,int v){
to[++tot]=v;net[tot]=head[u];head[u]=tot;
to[++tot]=u;net[tot]=head[v];head[v]=tot;
}
void dfs(int now){
size[now]=;
for(int i=head[now];i;i=net[i])
if(dad[now]!=to[i]){
dad[to[i]]=now;
dfs(to[i]);
ans+=1ll*size[now]*size[to[i]]*w[now];
size[now]+=size[to[i]];
}
}
int main(){
freopen("easy_LCA.in","r",stdin);
freopen("easy_LCA.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&w[i]);
ans+=w[i];
}
for(int i=;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
dfs();
printf("%lld",ans);
}
最新文章
- 更新chrom遇到flash过期解决办法
- C++ 箴言
- JS技术大全(防止复制,粘贴等)
- [troubleshoot][archlinux][X] GPU HANG
- win7局域网里输入正确密码也访问不了其他的机器
- Java学习----Java概述
- Spring依赖注入:注解注入总结
- Windows 系统消息范围和前缀,以及消息大全
- 织梦搜索页使用arclist标签
- HyperLedger Fabric 1.1 手动部署单机单节点
- SqlSugar 盲点
- Java高级特性-String、StringBuffer和StringBuilder
- pycharm terminal &#39;import&#39; 不是内部或外部命令,也不是可运行的程序
- JDK动态代理Demo代码,进一步学习分析
- PHP 7.3: ";continue"; targeting switch is equivalent to ";break";. Did you mean to use ";continue 2";? &#183; Issue #4037 &#183; aces/Loris
- <;20190106>;千兆 小型局域网传输速率不达标问题解决
- python hashable
- Simultaneous Localization and Mapping Technology Based on Project Tango
- 【bzoj3576】 Hnoi2014—江南乐
- chrome如何在选项卡打开网页
热门文章
- bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)
- [Swift通天遁地]三、手势与图表-(11)制作雷达图表更加形象表示各个维度的情况
- Codeforces 825D 二分贪心
- 【Leetcode】474. Ones and Zeroes
- 大数据插入Excel报错处理
- Unity学习-碰撞检测(七)
- Unity学习-工具准备(一)
- 笔记《精通css》第4章 背景图像,平铺方式,背景定位,圆角框,投影,不透明
- React Native真机调试安卓版
- 用C#在Visual Studio写Javascript单元测试