#pragma GCC optimize("Ofast")
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
#define int long long
using namespace std;
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int k,n1;
cin>>k>>n1;
vector<int>v[k];
while(n1--){
v[0].push_back(0);
}
for(int i = 1;i<k;i++){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
v[i].push_back(x);
}
}
vector<int>sz[k];
vector<bool>lv[k];
for(int i = 0;i<k;i++){
sz[i].resize(v[i].size());
lv[i].resize(v[i].size());
}
//cout<<1<<endl;
for(int i = k-1;i>0;i--){
//cout<<i<<endl;
for(int j = 0;j<v[i].size();j++){
//cout<<j<<' '<<sz[i][j]<<' '<<v[i][j]<<endl;
if(sz[i][j] == 0){
sz[i][j] = 1;
lv[i][j] = 1;
}
if(v[i][j] != 0){
//cout<<i<<endl;
//cout<<sz[i-1].size()<<endl;
sz[i-1][v[i][j]-1] += sz[i][j];
}
}
}
//cout<<2<<endl;
for(int j = 0;j<v[0].size();j++){
if(sz[0][j] == 0){
sz[0][j] = 1;
lv[0][j] = 1;
}
}
int sm = 0,free = 0;
for(int i = 0;i<k;i++){
int smp = 0;
for(int j = 0;j<v[i].size();j++){
if(v[i][j] == 0){
smp += sz[i][j];
}
}
if(smp > free){
sm += smp-free;
free = 0;
}
else{
free -= smp;
}
for(int j = 0;j<v[i].size();j++){
if(lv[i][j]){
free++;
}
}
}
cout<<sm;
}
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #pragma GCC optimize("Ofast") #pragma GCC optimize("O3,unroll-loops") #include <bits/stdc++.h> #define int long long using namespace std; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k,n1; cin>>k>>n1; vector<int>v[k]; while(n1--){ v[0].push_back(0); } for(int i = 1;i<k;i++){ int n; cin>>n; while(n--){ int x; cin>>x; v[i].push_back(x); } } vector<int>sz[k]; vector<bool>lv[k]; for(int i = 0;i<k;i++){ sz[i].resize(v[i].size()); lv[i].resize(v[i].size()); } //cout<<1<<endl; for(int i = k-1;i>0;i--){ //cout<<i<<endl; for(int j = 0;j<v[i].size();j++){ //cout<<j<<' '<<sz[i][j]<<' '<<v[i][j]<<endl; if(sz[i][j] == 0){ sz[i][j] = 1; lv[i][j] = 1; } if(v[i][j] != 0){ //cout<<i<<endl; //cout<<sz[i-1].size()<<endl; sz[i-1][v[i][j]-1] += sz[i][j]; } } } //cout<<2<<endl; for(int j = 0;j<v[0].size();j++){ if(sz[0][j] == 0){ sz[0][j] = 1; lv[0][j] = 1; } } int sm = 0,free = 0; for(int i = 0;i<k;i++){ int smp = 0; for(int j = 0;j<v[i].size();j++){ if(v[i][j] == 0){ smp += sz[i][j]; } } if(smp > free){ sm += smp-free; free = 0; } else{ free -= smp; } for(int j = 0;j<v[i].size();j++){ if(lv[i][j]){ free++; } } } cout<<sm; } |
English