#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <vector>
int main() {
std::vector<int> day_diffs;
std::vector<int> curr_tracks, prev_tracks;
int k, n;
scanf("%d %d", &k, &n);
day_diffs.resize(k + 1, 0);
curr_tracks.resize(n, 1);
auto flush_tracks = [&] (const std::vector<int>& tracks, int day) {
for (int track : tracks) {
if (track > 0) {
day_diffs[track]++;
day_diffs[day]--;
}
}
};
for (int i = 2; i <= k; i++) {
std::swap(curr_tracks, prev_tracks);
scanf("%d", &n);
curr_tracks.clear();
curr_tracks.reserve(n);
for (int j = 0; j < n; j++) {
int x;
scanf("%d", &x);
if (x == 0) {
curr_tracks.push_back(i);
} else {
int track_start = std::abs(prev_tracks[x - 1]);
prev_tracks[x - 1] = -track_start;
curr_tracks.push_back(track_start);
}
}
flush_tracks(prev_tracks, i);
}
flush_tracks(curr_tracks, k + 1);
int currcount = 0;
int maxcount = 0;
for (int i = 0; i <= k + 1; i++) {
currcount += day_diffs[i];
maxcount = std::max(maxcount, currcount);
}
assert(currcount == 0);
printf("%d\n", maxcount);
return 0;
}
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 | #include <cstdio> #include <cstdlib> #include <cassert> #include <vector> int main() { std::vector<int> day_diffs; std::vector<int> curr_tracks, prev_tracks; int k, n; scanf("%d %d", &k, &n); day_diffs.resize(k + 1, 0); curr_tracks.resize(n, 1); auto flush_tracks = [&] (const std::vector<int>& tracks, int day) { for (int track : tracks) { if (track > 0) { day_diffs[track]++; day_diffs[day]--; } } }; for (int i = 2; i <= k; i++) { std::swap(curr_tracks, prev_tracks); scanf("%d", &n); curr_tracks.clear(); curr_tracks.reserve(n); for (int j = 0; j < n; j++) { int x; scanf("%d", &x); if (x == 0) { curr_tracks.push_back(i); } else { int track_start = std::abs(prev_tracks[x - 1]); prev_tracks[x - 1] = -track_start; curr_tracks.push_back(track_start); } } flush_tracks(prev_tracks, i); } flush_tracks(curr_tracks, k + 1); int currcount = 0; int maxcount = 0; for (int i = 0; i <= k + 1; i++) { currcount += day_diffs[i]; maxcount = std::max(maxcount, currcount); } assert(currcount == 0); printf("%d\n", maxcount); return 0; } |
English