#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, k;
cin >> k;
map<pair<int, int>, int> bday;
set<pair<int, int>> done;
cin >> n;
for(int j = 1; j <= n; j++){
bday[{1, j}] = 1;
}
vector<int> arr;
arr.push_back(n);
for(int i = 2; i <= k; i++){
cin >> n;
arr.push_back(n);
for(int j = 1; j <= n; j++){
int a;
cin >> a;
if(a == 0){
bday[{i, j}] = i;
}else{
bday[{i, j}] = bday[{i-1, a}];
done.insert({i-1, a});
}
}
}
vector<int> dp(k+1);
int ans = 0;
int avab = 0;
for(int i = k; i > 0; i--){
int n = arr[i-1];
avab += dp[i];
for(int j = 1; j <= n; j++){
if(done.find({i, j}) != done.end()){
continue;
}
if(avab == 0){
ans++;
avab++;
}
avab--;
dp[bday[{i, j}] - 1]++;
}
}
cout << ans << '\n';
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include<bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, k; cin >> k; map<pair<int, int>, int> bday; set<pair<int, int>> done; cin >> n; for(int j = 1; j <= n; j++){ bday[{1, j}] = 1; } vector<int> arr; arr.push_back(n); for(int i = 2; i <= k; i++){ cin >> n; arr.push_back(n); for(int j = 1; j <= n; j++){ int a; cin >> a; if(a == 0){ bday[{i, j}] = i; }else{ bday[{i, j}] = bday[{i-1, a}]; done.insert({i-1, a}); } } } vector<int> dp(k+1); int ans = 0; int avab = 0; for(int i = k; i > 0; i--){ int n = arr[i-1]; avab += dp[i]; for(int j = 1; j <= n; j++){ if(done.find({i, j}) != done.end()){ continue; } if(avab == 0){ ans++; avab++; } avab--; dp[bday[{i, j}] - 1]++; } } cout << ans << '\n'; } |
English