代码献上
#include<bits/stdc++.h>
using namespace std;
bool maps[10010][10010];
int n,times[10010],stacks[10010],top,maxn,cnt;
int du(int num)
{
int count_=0;
for(int i=1;i<=n;i++) if(maps[i][num]) count_++;
return count_;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>times[i];
while(cin>>b)
{
if(!b) break;
maps[a][b]=1;
}
}
for(int i=1;i<=n;i++)
{
if(!du(i))
{
maxn=max(maxn,times[i]),stacks[++top]=i;
}
}
while(top>0)
{
int num=stacks[top--];
for(int i=1;i<=n;i++)
{
if(!du(i))
{
maps[i][num]=0,stacks[++top]=i;
cnt+=maxn;
maxn=max(maxn,times[i]);
}
}
}
cout<<cnt;
}