// Author : Jakub Rożek
// Task : KON - Konferencja [B]
// Memory : k + ∑ n_i
// Time : k + ∑ n_i
// Solv : wzo - od tylu analizujemy dni
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int k;
cin >> k;
vector<int> meetings(k + 1); // ile spotkan w dniu
vector<vector<long long>> before(k + 1); // na jakim wykladzie mam byc przed
vector<vector<long long>> need(k + 1); // potrzebuje tu x ludzi, by dalej poszli
long long answer = 0; // ilu trzeba ludzi
cin >> meetings[1];
before[1].resize(meetings[1] + 1, 0);
need[1].resize(meetings[1] + 1, 0);
for (int day = 2; day <= k; ++day) {
cin >> meetings[day];
before[day].resize(meetings[day] + 1);
need[day].resize(meetings[day] + 1, 0);
for (int i = 1; i <= meetings[day]; ++i) {
cin >> before[day][i];
}
}
for (int day = k; day >= 1; --day) {
long long need_people = 0; // ilu ludzi potrzebuje tego dnia
for (int i = 1; i <= meetings[day]; ++i) {
if (need[day][i] == 0) {
need[day][i] = 1;
}
need_people += need[day][i];
if (before[day][i] != 0) {
need[day-1][before[day][i]] += need[day][i];
}
answer = max(answer, need_people);
}
}
cout << answer << '\n';
}
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 | // Author : Jakub Rożek // Task : KON - Konferencja [B] // Memory : k + ∑ n_i // Time : k + ∑ n_i // Solv : wzo - od tylu analizujemy dni #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int k; cin >> k; vector<int> meetings(k + 1); // ile spotkan w dniu vector<vector<long long>> before(k + 1); // na jakim wykladzie mam byc przed vector<vector<long long>> need(k + 1); // potrzebuje tu x ludzi, by dalej poszli long long answer = 0; // ilu trzeba ludzi cin >> meetings[1]; before[1].resize(meetings[1] + 1, 0); need[1].resize(meetings[1] + 1, 0); for (int day = 2; day <= k; ++day) { cin >> meetings[day]; before[day].resize(meetings[day] + 1); need[day].resize(meetings[day] + 1, 0); for (int i = 1; i <= meetings[day]; ++i) { cin >> before[day][i]; } } for (int day = k; day >= 1; --day) { long long need_people = 0; // ilu ludzi potrzebuje tego dnia for (int i = 1; i <= meetings[day]; ++i) { if (need[day][i] == 0) { need[day][i] = 1; } need_people += need[day][i]; if (before[day][i] != 0) { need[day-1][before[day][i]] += need[day][i]; } answer = max(answer, need_people); } } cout << answer << '\n'; } |
English