#include <cstdio>
#include <vector>
using Day = std::vector<int>;
Day readDay() {
Day day;
int n;
scanf("%d", &n);
day.resize(n + 1);
for (int i = 1; i <= n; ++i) {
scanf("%d", &day[i]);
}
return day;
}
int process(const int& meetings, const Day& day, Day& buffer) {
Day nextBuffer;
nextBuffer.resize(meetings + 1);
for (int i = 1; i < day.size(); ++i) {
nextBuffer[day[i]] += buffer[i];
}
int minimalWorkers = 0;
for (int i = 1; i < nextBuffer.size(); ++i) {
if (nextBuffer[i] == 0) {
nextBuffer[i] = 1;
}
minimalWorkers += nextBuffer[i];
}
buffer = std::move(nextBuffer);
return minimalWorkers;
}
int main() {
int k, n;
scanf("%d %d\n", &k, &n);
std::vector<Day> days;
for (int i = 2; i <= k; ++i) {
days.emplace_back(readDay());
}
int minimalWorkers = days.back().size() - 1;
Day buffer;
for (int i = 0; i < days.back().size(); ++i) {
buffer.push_back(1);
}
buffer[0] = 0;
for (int i = days.size() - 1; 0 <= i; --i) {
minimalWorkers = std::max(minimalWorkers, process(0 <= i - 1 ? days[i - 1].size() - 1 : n, days[i], buffer));
}
printf("%d\n", minimalWorkers);
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 | #include <cstdio> #include <vector> using Day = std::vector<int>; Day readDay() { Day day; int n; scanf("%d", &n); day.resize(n + 1); for (int i = 1; i <= n; ++i) { scanf("%d", &day[i]); } return day; } int process(const int& meetings, const Day& day, Day& buffer) { Day nextBuffer; nextBuffer.resize(meetings + 1); for (int i = 1; i < day.size(); ++i) { nextBuffer[day[i]] += buffer[i]; } int minimalWorkers = 0; for (int i = 1; i < nextBuffer.size(); ++i) { if (nextBuffer[i] == 0) { nextBuffer[i] = 1; } minimalWorkers += nextBuffer[i]; } buffer = std::move(nextBuffer); return minimalWorkers; } int main() { int k, n; scanf("%d %d\n", &k, &n); std::vector<Day> days; for (int i = 2; i <= k; ++i) { days.emplace_back(readDay()); } int minimalWorkers = days.back().size() - 1; Day buffer; for (int i = 0; i < days.back().size(); ++i) { buffer.push_back(1); } buffer[0] = 0; for (int i = days.size() - 1; 0 <= i; --i) { minimalWorkers = std::max(minimalWorkers, process(0 <= i - 1 ? days[i - 1].size() - 1 : n, days[i], buffer)); } printf("%d\n", minimalWorkers); return 0; } |
English