#include<iostream> #include<cstdio> using namespace std; int n,cnt,ans,head[10001],v[10001],r[10001],ed[10001]; struct data{ int to,next; }e[1000001]; void insert(int u,int v){ e[++cnt].to=v; e[cnt].next=head[u]; head[u]=cnt; } void dfs(int x,int t){ int i=head[x]; while(i){ if(ed[e[i].to]<v[e[i].to]+t){ ed[e[i].to]=v[e[i].to]+t; dfs(e[i].to,ed[e[i].to]); } i=e[i].next; } ans=max(ans,t); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int t,w;scanf("%d%d",&v[i],&t); for(int j=1;j<=t;j++){ scanf("%d",&w); insert(i,w); r[w]++; } } for(int i=1;i<=n;i++) if(!r[i])insert(0,i); dfs(0,0); printf("%d",ans); }