#include<bits/stdc++.h>
using namespace std;
int main(){
long long n, m, i, j;
cin >> n >> m;
map<long long, long long> outputs = {{1, m}};
vector<long long> last(m, 0);
map<long long, long long> counter;
vector<long long> curr;
for(i=0; i<n-1; i++){
cin >> m;
counter.clear();
curr.resize(m);
for(j=0; j<m; ++j){
cin >> curr[j];
counter[curr[j]]++;
}
for(auto x:counter){
if(x.first==0) outputs[0] = max(outputs[0], counter[0]);
else{
long long a = max(x.second, last[x.first-1]);
outputs[last[x.first-1]]--;
outputs[a]++;
counter[x.first] = a;
}
}
counter[0] = 1;
for(j=0; j<m; j++) curr[j] = counter[curr[j]];
last = curr;
}
long long output = 0;
for(auto x:outputs) output+=(x.first*x.second);
cout << output;
}
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 | #include<bits/stdc++.h> using namespace std; int main(){ long long n, m, i, j; cin >> n >> m; map<long long, long long> outputs = {{1, m}}; vector<long long> last(m, 0); map<long long, long long> counter; vector<long long> curr; for(i=0; i<n-1; i++){ cin >> m; counter.clear(); curr.resize(m); for(j=0; j<m; ++j){ cin >> curr[j]; counter[curr[j]]++; } for(auto x:counter){ if(x.first==0) outputs[0] = max(outputs[0], counter[0]); else{ long long a = max(x.second, last[x.first-1]); outputs[last[x.first-1]]--; outputs[a]++; counter[x.first] = a; } } counter[0] = 1; for(j=0; j<m; j++) curr[j] = counter[curr[j]]; last = curr; } long long output = 0; for(auto x:outputs) output+=(x.first*x.second); cout << output; } |
English