code
#include<bits/stdc++.h>
using namespace std;
vector<int> dir[1505];
int s[1505];
long long dp[1505][3];
bool head[1505];
void dfs(int n)
{
for(int i=0;i<dir[n].size();i++)
{
dfs(dir[n][i]);
}
if(dir[n].size()!=0)
{
bool t=0;
long long mi=0x3F3F3F3F;
long long cnt=0;
for(int i=0;i<dir[n].size();i++)
{
if(dp[dir[n][i]][1]<=dp[dir[n][i]][0])
{
cnt+=dp[dir[n][i]][1];
t=1;
}
else
{
cnt+=dp[dir[n][i]][0];
if(dp[dir[n][i]][0]-dp[dir[n][i]][1]<mi)
{
mi=dp[dir[n][i]][0]-dp[dir[n][i]][1];
}
}
}
if(t==0)
{
cnt-=mi;
}
dp[n][0]=cnt;
}
else
{
dp[n][0]=0x3F3F3F3F;
}
dp[n][1]=s[n];
for(int i=0;i<dir[n].size();i++)
{
if(dp[dir[n][i]][0]==0x3F3F3F3F)
continue;
dp[n][1]+=dp[dir[n][i]][2];
}
long long r1=0,r2=s[n];
for(int i=0;i<dir[n].size();i++)
{
r1+=min(dp[dir[n][i]][0],dp[dir[n][i]][1]);
r2+=dp[dir[n][i]][2];
}
dp[n][2]=min(r1,r2);
return;
}
int main()
{
int n;
int t,m,p;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
cin>>s[t];
cin>>m;
for(int j=1;j<=m;j++)
{
cin>>p;
dir[t].push_back(p);
head[p]=1;
}
}
int i;
for(i=1;i<=n;i++)
{
if(!head[i])
break;
}
memset(dp,0,sizeof(dp));
dfs(i);
cout<<min(dp[i][0],dp[i][1]);
return 0;
}