#include <cstdio>
#include <vector>
#ifdef LOCAL
#define dbg(...) fprintf(stderr, __VA_ARGS__)
#else
#define dbg(...)
#endif
using namespace std;
vector<vector<int>> prev_meeting; // meeting X on day D requires you to attend meeting prev_meeting[D][X] on day D-1
vector<vector<int>> ppl_req; // meeting X on day D must be attended by at least ppl_req[D][X] people.
int main() {
int k, n1, ntemp;
scanf("%d %d", &k, &n1);
prev_meeting.reserve(k+1);
ppl_req.reserve(k+1);
ppl_req.emplace_back(n1, 0);
prev_meeting.emplace_back(n1, 0);
for (int i = 1; i < k; ++i) {
int nx;
scanf("%d", &nx);
prev_meeting.emplace_back(nx);
ppl_req.emplace_back(nx, 0);
for (int j = 0; j < nx; j++) {
int mx;
scanf("%d", &mx);
prev_meeting[i][j] = mx - 1; // change to 0-indexed
}
}
int maxreq = 0;
for (int i = k - 1; i >= 0; --i) {
int totalreq = 0;
for (unsigned int j = 0; j < prev_meeting[i].size(); ++j) {
if (ppl_req[i][j] == 0) {
ppl_req[i][j] = 1;
}
totalreq += ppl_req[i][j];
if (i == 0) continue;
const int required_meet = prev_meeting[i][j];
if (required_meet != -1) {
ppl_req[i-1][required_meet] += ppl_req[i][j];
}
}
if (totalreq > maxreq) {
maxreq = totalreq;
}
}
printf("%d\n", maxreq);
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 59 | #include <cstdio> #include <vector> #ifdef LOCAL #define dbg(...) fprintf(stderr, __VA_ARGS__) #else #define dbg(...) #endif using namespace std; vector<vector<int>> prev_meeting; // meeting X on day D requires you to attend meeting prev_meeting[D][X] on day D-1 vector<vector<int>> ppl_req; // meeting X on day D must be attended by at least ppl_req[D][X] people. int main() { int k, n1, ntemp; scanf("%d %d", &k, &n1); prev_meeting.reserve(k+1); ppl_req.reserve(k+1); ppl_req.emplace_back(n1, 0); prev_meeting.emplace_back(n1, 0); for (int i = 1; i < k; ++i) { int nx; scanf("%d", &nx); prev_meeting.emplace_back(nx); ppl_req.emplace_back(nx, 0); for (int j = 0; j < nx; j++) { int mx; scanf("%d", &mx); prev_meeting[i][j] = mx - 1; // change to 0-indexed } } int maxreq = 0; for (int i = k - 1; i >= 0; --i) { int totalreq = 0; for (unsigned int j = 0; j < prev_meeting[i].size(); ++j) { if (ppl_req[i][j] == 0) { ppl_req[i][j] = 1; } totalreq += ppl_req[i][j]; if (i == 0) continue; const int required_meet = prev_meeting[i][j]; if (required_meet != -1) { ppl_req[i-1][required_meet] += ppl_req[i][j]; } } if (totalreq > maxreq) { maxreq = totalreq; } } printf("%d\n", maxreq); return 0; } |
English