/* 2026
* Maciej Szeptuch
*/
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <vector>
const int MAX_DAYS = 524288;
unsigned days;
unsigned meetings[MAX_DAYS];
std::vector<unsigned> req[MAX_DAYS];
std::vector<long long unsigned> needs[2];
long long unsigned result;
int main(void)
{
scanf("%u %u", &days, &meetings[0]);
result = meetings[0];
assert(0 < days && days < MAX_DAYS);
needs[0].resize(meetings[0]);
for(int d = 1; d < days; ++d)
{
scanf("%u", &meetings[d]);
req[d].resize(meetings[d]);
for(int m = 0; m < meetings[d]; ++m)
scanf("%u", &req[d][m]);
}
needs[!(days & 1)].resize(meetings[days - 1]);
for(int d = days - 1; d >= 0; --d)
{
long long unsigned day_result = 0;
if(d > 0)
{
needs[!(d & 1)].clear();
needs[!(d & 1)].resize(meetings[d - 1]);
}
for(unsigned m = 0; m < meetings[d]; ++m)
{
long long unsigned attendees = std::max(needs[d & 1][m], 1LLU);
// fprintf(stderr, "[day %d][meeting %u]: needs %llu\n", d, m + 1, attendees);
day_result += attendees;
if(d > 0 && req[d][m] > 0)
needs[!(d & 1)][req[d][m] - 1] += attendees;
}
// fprintf(stderr, "[day %d] total: %llu\n", d, day_result);
if(day_result > result)
result = day_result;
}
printf("%llu\n", result);
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 58 | /* 2026 * Maciej Szeptuch */ #include <algorithm> #include <cassert> #include <cstdio> #include <vector> const int MAX_DAYS = 524288; unsigned days; unsigned meetings[MAX_DAYS]; std::vector<unsigned> req[MAX_DAYS]; std::vector<long long unsigned> needs[2]; long long unsigned result; int main(void) { scanf("%u %u", &days, &meetings[0]); result = meetings[0]; assert(0 < days && days < MAX_DAYS); needs[0].resize(meetings[0]); for(int d = 1; d < days; ++d) { scanf("%u", &meetings[d]); req[d].resize(meetings[d]); for(int m = 0; m < meetings[d]; ++m) scanf("%u", &req[d][m]); } needs[!(days & 1)].resize(meetings[days - 1]); for(int d = days - 1; d >= 0; --d) { long long unsigned day_result = 0; if(d > 0) { needs[!(d & 1)].clear(); needs[!(d & 1)].resize(meetings[d - 1]); } for(unsigned m = 0; m < meetings[d]; ++m) { long long unsigned attendees = std::max(needs[d & 1][m], 1LLU); // fprintf(stderr, "[day %d][meeting %u]: needs %llu\n", d, m + 1, attendees); day_result += attendees; if(d > 0 && req[d][m] > 0) needs[!(d & 1)][req[d][m] - 1] += attendees; } // fprintf(stderr, "[day %d] total: %llu\n", d, day_result); if(day_result > result) result = day_result; } printf("%llu\n", result); return 0; } |
English