题目描述

在星际争霸(StarCraft)中,有3个种族。对于任意一个种族,他们的建筑建造都是有一个顺序的。这个顺序正好是一个树形结构,我们称之为"科技树"(Technology tree)。

在科技树中,只有一个建筑是不需要前置建筑的,我们把这个建筑的编号设为1。其他的建筑,有且仅有一个前置建筑。

比如建筑2的前置建筑为建筑1,意思是只有先建造了建筑1,才能建造建筑2。

一个种族有n个建筑,建筑1没有前置建筑,建筑i(2≤i≤n)的前置建筑为f。每个建筑的建造都需要费用,建筑i(1≤i≤n)的建造花费为a晶体矿和b高能瓦斯。

现在tokitsukaze想知道,如果想要建造建筑x,总共需要消耗多少晶体矿和高能瓦斯。

输入描述:

第一行包含一个T(T≤10),表示T组数据。对于每组数据:
第一行包含两个正整数n,q(1≤n,q≤20000),表示有n个建筑和q次查询。
接下来n行,每行包含两个整数a,b(0≤a,b≤300),表示建造建筑i需要花费a晶体矿和b高能瓦斯。
接下来一行,包含n-1个正整数f(1≤f≤n)。第i个(1≤i<n)正整数fi(1≤fi<i)表示建筑i+1的前置建筑为fi。
接下来q行,每行包含一个正整数x,表示询问。

输出描述:

对于每个询问,输出一行,包含两个整数c,d(用空格隔开),表示如果想要建造建筑x,总共需要消耗c晶体矿和d高能瓦斯。

示例1

输入

复制

1
4 4
1 5
10 100
200 50
66 88
1 1 2
1
2
3
4

输出

复制

1 5
11 105
201 55
77 193

说明

第一组样例:如果想要建造建筑1,总共需要消耗1晶体矿和5高能瓦斯。如果想要建造建筑2,需要先建造建筑1,总共需要消耗1+10晶体矿和5+100高能瓦斯。
如果想要建造建筑3,需要先建造建筑1,总共需要消耗1+200晶体矿和5+50高能瓦斯。
如果想要建造建筑4,需要先建造建筑1和建筑2,总共需要消耗1+10+66晶体矿和5+100+88高能瓦斯。

题目链接:

https://ac.nowcoder.com/acm/contest/303/K

解题思路:

题意我就不说了,这是个中文题,都能看懂题意,做这个题主要就是输入时比较复杂,我的处理是把晶体矿和高能矿分别存到ab数组里,然后用打表的思想把所有的村庄都走一遍,分别记录每个地方所需的ab材料

程序代码:

#include<stdio.h>
#include<string.h>
const int maxn=20010;int a[maxn];
int b[maxn];
int f[maxn];
int main()
{int T,n,q,i,x;scanf("%d",&T);while(T--){scanf("%d%d",&n,&q);for(i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);for(i=2;i<=n;i++)scanf("%d",&f[i]);for(i=2;i<=n;i++){a[i]+=a[f[i]];b[i]+=b[f[i]];}while(q--){scanf("%d",&x);printf("%d %d\n",a[x],b[x]);}  }return 0;
}

牛客网-Technology Tree相关推荐

  1. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) H.Tree Recovery-完全版线段树(区间更新、区间求和)...

    H.Tree Recovery 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 链接:https:/ ...

  2. 2018牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit (树状数组)

    链接:https://ac.nowcoder.com/acm/contest/148/A 来源:牛客网 Rikka with Lowbit 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C ...

  3. 牛客网暑期ACM多校训练营(第三场)

    牛客网暑期ACM多校训练营(第三场) A. PACM Team 01背包,输出方案,用bool存每种状态下用的哪一个物品,卡内存.官方题解上,说用char或者short就行了.还有一种做法是把用的物品 ...

  4. 牛客网与leetcode刷题(高频题中简单or中等的)

    目录 1.反转链表 2.排序 3.先序中序后序遍历 4.最小的k个数 5.子数组的最大累加和 6. 用两个栈实现队列 7.142. 环形链表 II 8.20. 有效的括号 9.最长公共子串(动态规划) ...

  5. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  6. 牛客网暑期ACM多校训练营(第二场): H. travel(树形线头DP)

    链接:https://ac.nowcoder.com/acm/contest/140/H 来源:牛客网 题目描述 White Cloud has a tree with n nodes.The roo ...

  7. 牛客网视频总结5(二叉树)

    牛客网视频总结5 目录 牛客网视频总结5 二叉树先序.中序.后序遍历 递归方法 非递归方法 二叉树的后继节点/先驱节点 后继节点 前驱节点 二叉树的序列化和反序列化 判断二叉树是否为平衡二叉树(树型D ...

  8. 大数据与云计算——牛客网大数据面试问题总结

    本文是个人从牛客网中的大数据的面试的面经中筛选出来与大数据的的相关的面试的问题:包括以下的技术栈: Flume Zookeeper Hbase Hive Hadoop  Spark Flink  HD ...

  9. 牛客网Java选择题练习

    牛客网Java选择题练习 2021/1/12 2021/1/13 2021/1/14 2021/1/16 2021/1/17 2021/1/18 2021/1/20 2021/1/21 2021/1/ ...

最新文章

  1. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
  2. OpenSUSE 13.1 和 OpenSUSE 12.3 用户如何安装 Cinnamon 2.2 桌面
  3. Android通过cat /sys/kernel/debug/usb/devices获取USB信息
  4. 105. Leetcode 121. 买卖股票的最佳时机 (动态规划-股票交易)
  5. 吴恩达机器学习笔记57-基于内容的推荐系统(Content Based Recommendations)
  6. Caffe官方教程翻译(2):Web demo
  7. nodejs的启动方式
  8. android常犯错误记录(一)
  9. android绘制矢量图_Android矢量可绘制
  10. netbeans运行KEmulator
  11. MySQL彻底卸载教程
  12. 常用的计算机优化软件有哪些,计算机常用的硬件和软件优化软件和优化方法有哪些,如何提高WindowsXP系统的运行速度和稳定性...
  13. 如何清空各种浏览器缓存
  14. Vscode怎么进行文件对比-Vscode文件对比的方法介绍
  15. 10个实用的Excel技巧
  16. MRI数据预处理--使用FSL-BET轻松去头骨,提取脑组织
  17. DataStream与DataSet
  18. 华为设备DHCP snooping配置
  19. 基于深度学习的细粒度分类调研1
  20. php 7.0 readfile_php readfile下载大文件失败的解决方法

热门文章

  1. ANDROID事件触发机制
  2. 网规之路——强化项目管理知识点训练
  3. CDN和CDN加速原理
  4. sqlserver中的分页sql语句,不同于mysql中的limit,相当于top+top
  5. 浅尝JQ AJAX
  6. 标准的的Flash插入
  7. 建立最简单的OpenCASCADE程序
  8. 接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)
  9. UDP套接字编程以及提高UDP可靠性的方法
  10. 想学人工智能从哪入手?