RT
#include<bits/stdc++.h>
using namespace std;
#define I(e) for(int i=1;i<=e;i++)
struct T{
int p;
int len;
vector<int>c;
int t;
bool v;
int F;
}a[10010];
int fl;
int ct;
int n;
void dfs(int place,int sums){
if(sums>n){
return ;
}
int maxF=1;
for(int i=0;i<a[place].c.size();i++){
if(maxF<=a[a[place].c[i]].F+1){
a[place].t=max(a[place].len+a[a[place].c[i]].t,a[place].t);
}
}
a[place].F=maxF;
if(maxF>fl){
fl=maxF;
}
dfs(place+1,sums+1);
return ;
}
int main(){
cin>>n;
a[0].F=1;
a[0].v=1;
I(n){
scanf("%d%d",&a[i].p,&a[i].len);
int ct=-1;
while(ct!=0){
scanf("%d",&ct);
a[i].c.push_back(ct);
}
}
dfs(1,0);
cout<<a[n].t;
return 0;
}
10分,思路没错吧??