[编程 |300]函数调用栈

题目描述

栈区(stack),由编译器自动分配和释放,存放函数的参数值,局部变量的值等。

操作方式类似于数据结构中的栈。函数调用链栈总和为调用链中各个函数栈大小的总和,

例如:入口函数A,分配100个字节的栈空间,A调用函数B,B分配50个字节的栈空间, B调用函数C,C分配120个字节的栈空间,则A->B->C函数调用链的栈总和为

100+50+120=270。

输入描述

输入

输入内容描述:
第1行:调用关系总组数n 第1组被调函数个数 第2组被调函数个数 ... 第n组被调函数个数
第2行:调用函数1 函数1栈大小  被调函数1...被调函数m
...
第n+1行:调用函数n 函数n栈大小  被调函数1...被调函数k
最多100行
5 2 3 1 0 0  //5组调用 第一组调用2个函数,第二组调用3个函数,第三组调用1个函数,第五组无函数调用,第四组无函数调用
1 20 2 3     //函数1,栈大小为20,调用函数2、3
2 30 3 4 5   //函数2,栈大小为30,调用函数3、4、5
3 50 4
4 60
5 80

输出描述:

1.所有调用链中栈总和的最大值,注意输入之中的入口函数可能不唯一,比如可能存在1调用函数2、3,5调用6,6调用7,则有
1->2,1->3,5->6->7三个调用链,有两个入口函数1和5。
2.所有调用链中只要存在一个递归调用(即直接或间接调用自己,比如1->2->3->1即为递归调用,则输出R
3.如果调用链中有函数未给出调用栈大小,则输出NA

示例1

输入

5 2 3 1 0 0
1 20 2 3
2 30 3 4 5
3 50 4
4 60
5 80

输出

160

说明

- 函数调用链:
- 1->2->3->4 调用链栈总和为20+30+50+60=160
- 1->2->4 调用链栈总和为20+30+60=110
- 1->2->5 调用链栈总和为20+30+80=130
- 1->3->4 调用链栈总和为20+50+60=130
- 所有调用链中 栈总和最大的是1->2->3->4,最大值为160,所以输出为160