60 lines
999 B
C++
60 lines
999 B
C++
#include <bits/stdc++.h>
|
|
|
|
using namespace std;
|
|
|
|
typedef long long ll;
|
|
|
|
set<int> learnedMoves;
|
|
vector<pair<ll, vector<int>>> movelist;
|
|
ll result = 0;
|
|
|
|
void handleMove(int move){
|
|
auto s = learnedMoves.size();
|
|
learnedMoves.insert(move);
|
|
|
|
if(s == learnedMoves.size()){
|
|
return;
|
|
}
|
|
|
|
result += movelist[move - 1].first;
|
|
for(int neededMove : movelist[move - 1].second){
|
|
handleMove(neededMove);
|
|
}
|
|
}
|
|
|
|
int main(){
|
|
ios::sync_with_stdio(0);
|
|
cin.tie(0);
|
|
|
|
int n;
|
|
cin >> n;
|
|
|
|
movelist.reserve(n);
|
|
|
|
for(int i = 0; i < n; ++i){
|
|
ll t;
|
|
int k;
|
|
|
|
cin >> t >> k;
|
|
|
|
vector<int> neededMoves(k);
|
|
|
|
for(int j = 0; j < k; ++j){
|
|
cin >> neededMoves[j];
|
|
}
|
|
movelist[i].first = t;
|
|
movelist[i].second = neededMoves;
|
|
}
|
|
|
|
result += movelist[n - 1].first;
|
|
|
|
for(int move : movelist[n - 1].second){
|
|
handleMove(move);
|
|
}
|
|
|
|
cout << result;
|
|
|
|
cout << flush;
|
|
|
|
return 0;
|
|
} |