#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int h[10010],e[10010],ne[10010],idx;
int len[10010],ans[10010],d[10010];
queue<int> q;
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int main()
{
int n;
cin>>n;
memset(h,-1,sizeof(h));
for(int i=1;i<=n;i++)
{
int s,cost;
cin>>s>>cost;
len[i]=cost;
while(1)
{
int a;
cin>>a;
if(!a) break;
else add(a,i);d[i]++;
}
}
for(int i=1;i<=n;i++)
{
if(!d[i]) {q.push(i);ans[i]=len[i];}
}
while(!q.empty())
{
int t=q.front();
for(int i=h[t];i!=-1;i=ne[i])
{
int j=e[i];
d[j]--;
ans[j]=max(ans[j],ans[t]+len[j]);
if(d[j]==0)
q.push(j);
}
q.pop();
}
int sum=0;
for(int i=1;i<=n;i++)
sum=max(sum,ans[i]);
cout<<sum;
return 0;
}