#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=10005;
int e[N],ne[N],h[N],q[N],d[N],t[N],tt[N],idx;
void add(int y,int x){
e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void topsort(int n){
queue<int>q;
for(int i=1;i<=n;++i){
if(d[i]==0){
q.push(i);
tt[i]=t[i];
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=h[x];i!=-1;i=ne[i]){
int k=e[i];
d[k]--;
tt[k]=max(tt[k],t[k]+tt[x]);
if(d[k]==0)q.push(k);
}
}
}
int main(){
int i,idx,n,x,s,m;
idx=0;
memset(h,-1,sizeof h);
cin>>n;
for(i=1;i<=n;++i){
cin>>m>>t[i];
s=0;
while(1){
cin>>x;
if(x==0)break;
add(m,x);
++s;
}
d[m]=s;
}
topsort(n);
cout<<tt[n];
return 0;
}