#include <bits/stdc++.h>
using namespace std;
#define res register int
#define inf 0x3f3f3f3f
const int maxn=1e4+5;
vector<int> v[maxn];
int t[maxn],N,ru[maxn];
int dis[maxn];
struct Node{
int x,sum;
};
priority_queue<Node> q;
bool operator<(const Node a,const Node b){
return a.sum<b.sum;
}
void dijkstra(int n)
{
while(!q.empty()) q.pop();
q.push((Node){n,t[n]});
while(!q.empty()){
Node now=q.top();
q.pop();
for(res i=0;i<v[now.x].size();i++){
int to=v[now.x][i];
if(dis[to]<now.sum+t[to]){
dis[to]=now.sum+t[to];
q.push((Node){to,dis[to]});
}
}
}
}
int main()
{
cin>>N;
int cnt,temp;
for(res i=1;i<=N;i++){
scanf("%d",&cnt);
scanf("%d",&t[cnt]);
do{
scanf("%d",&temp);
if(temp){
v[temp].push_back(cnt);
ru[cnt]++;
}
}while(temp);
}
for(res i=1;i<=N;i++)
if(!ru[i]) dijkstra(i);//从入度为0的点开始
int Max=-inf;
for(res i=1;i<=N;i++)
Max=max(Max,dis[i]);
printf("%d",Max);
return 0;
}