【问题描述】
圣诞节又快到了,每年教堂里都有很多的圣诞特别礼物,圣诞特别礼物挂在一棵圣诞树上,这棵树有n层,每层有一件礼物,每件礼物都有一个价值,有的礼物还有一些连接线,与下层的礼物相连。领取礼物的规则如下:任选一件礼物,它的下面如果有连接线,则可以继续取它连接的礼物,依次类推,直至取到没有连接线的礼物才结束。你如果是第一个去取,怎样才能获得最大的价值呢?请你编写一个程序解决这个问题。
【输入】
第一行只有一个整数n,表示有n层礼物。
以下有n行数据,分别表示第1-n层礼物的状态,每行第一个数据表示该礼物的价值w,第二个数据p表示有p条连线,紧接p个数据表示它与哪些礼物相连。
【输出】
一个整数表示获得的最大价值。
输入样例
3
12 2 2 3
20 0
30 0
输出:42
#include<bits/stdc++.h>
using namespace std;
int n,a[1005],t,i2,l;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>l>>t;
a[i]+=l;
while(t>0){
cin>>i2;
a[i2]=a[i2]+a[i];
t--;
}
}
sort(a+1,a+1+n);
cout<<a[n];
}
不布吉岛为什么样例对的提交全WA,蒟蒻在线求助qwq