T9270 mjt树
题目背景
从前森林里有一棵很大的mjt树,树上有很多小动物。
题目描述
mjt树上有 n 个房间,第 i 个房间住着 ai 只第bi 种小动物。
这n个房间用n-1条路连接起来,其中房间1位mjt树的根。
现在每个房间x的小动物想知道,以房间x为根的mjt树中有多少只它们的同类.
输入输出格式
输入格式:
第一行一个整数n,表示房间数
接下来n行,每行两个整数ai,bi
再之后n-1,每行两个整数x、y,表示x和y之间有一条路径
输出格式:
一行n个数,第i个数表示以房间i为根的mjt树中bi种小动物有多少只,两个数之间用空格隔开
输入输出样例
输入样例#1: 复制
5
2 1
3 1
4 2
5 1
6 2
1 2
1 3
3 4
3 5
输出样例#1: 复制
10 3 10 5 6
说明
bi<=n<=100000,ai<=1000
by xjjppm.
dfs,把他的之前遍历的该编号的数+上子树的减去进入该节点之前遍历的
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn =200007;
struct T{int a,b;
}tree[maxn];
struct node{int v,next;
}edge[maxn];
int n,num=0,head[maxn],sum[maxn];
void add_edge(int a,int b) {edge[++num].v=b;edge[num].next=head[a];head[a]=num;
}
int size[maxn],ans[maxn];void dfs(int x,int f) {ans[x]=size[tree[x].b];size[tree[x].b]+=tree[x].a;for(int i=head[x];i;i=edge[i].next) {int v=edge[i].v;if(v!=f) dfs(v,x);}ans[x]=size[tree[x].b]-ans[x];
}
int main() {scanf("%d",&n);for(int i=1;i<=n;++i) {scanf("%d%d",&tree[i].a,&tree[i].b);}for(int a,b,j=1;j<n;++j) {scanf("%d%d",&a,&b);add_edge(a,b);add_edge(b,a);}dfs(1,0);for(int i=1;i<=n;i++) {printf("%d ",ans[i]);}return 0;
}
转载于:https://www.cnblogs.com/sssy/p/7739396.html
T9270 mjt树相关推荐
- 牛客竞赛mjt的毒瘤赛
题目链接 https://ac.nowcoder.com/acm/contest/368/F 思路 询问可以离线. 然后每个节点上建32个权值线段树(权值不大,其实只要20颗) 记录每一位权值为x(如 ...
- 判断两个树是否相等和判断tree1是否包含tree2 python实现
判断两个树是否相等 def equal(node_a, node_b):"""判断两个树是否相等:param node_a: :param node_b: :return ...
- 论文溯源树AMiner
来自 DBLP.ArXiv.STM 等多家学术出版机构和平台的数据表明,在过去 20 年间,计算机科学.物理学.统计学等研究领域的出版物总量都有大幅增加.像 CVPR.AAAI 等有关人工智能等新兴领 ...
- Python---哈夫曼树---Huffman Tree
今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...
- 深度树匹配模型(TDM)
深度树匹配模型(TDM) 算法介绍 Tree-based Deep Match(TDM)是由阿里妈妈精准定向广告算法团队自主研发,基于深度学习上的大规模(千万级+)推荐系统算法框架.在大规模推荐系统的 ...
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- 二逼平衡树——树套树(线段树套Splay平衡树)
题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...
- 线段树——HDU - 1698
题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
最新文章
- 2005年4月全国计算机等级考试二级C语言笔试试题及答案
- 【iOS开发】静态库 a文件合成脚本解释
- php sql alert,SQL ALTER
- 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt
- pandas中to_csv()和read_csv()参数详解
- 关于pytorch中super的一点思考,结合代码
- 122. 买卖股票的最佳时机 II golang
- Redis 属于单线程还是多线程?不同的版本有什么区别?
- smartctl 输出详解
- 在CentOS上的Docker私有注册表
- 2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令
- oracle in table类型,Oracle Built-in Data Types(Oracle内置数据类型)
- 飞腾服务器虚拟化,基于飞腾平台的容器虚拟化技术研究
- 发那可g10_fanuc系统中的G10格式会根据输入的数据不同而不同
- 计算机控制实验 实验十,自控计控原理实验箱
- MATLAB自带插值函数
- 【前端小技能】ElementUI表格双击可编辑--开箱即用
- 张家港、张家口、张家界、张家川
- 如果判断小米MIUI的NFC权限、后台弹出界面权限是否禁用
- Bootstrap的基本使用方法介绍