#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
constexpr int mx = 5e5 + 3;
vector<int> tab[mx];
vector<int> wynik[mx];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int suma = 0, wolne = 0;
int wolneNaTure;
int dni, spotkania;
cin >> dni >> spotkania;
wynik[0].push_back(0);
tab[0].push_back(0);
tab[1].push_back(0);
wynik[1].push_back(0);
for (int i = 0; i < spotkania; i++) {
tab[1].push_back(0);
wynik[1].push_back(0);
}
int spotkaniaNaDzien;
int x;
for (int i = 2; i <= dni; i++) {
cin >> spotkaniaNaDzien;
tab[i].push_back(0);
wynik[i].push_back(0);
for (int j = 0; j < spotkaniaNaDzien; j++) {
cin >> x;
tab[i].push_back(x);
wynik[i].push_back(0);
}
}
for (int i = dni; i >= 1; i--) {
wolneNaTure = 0;
for (int j = 1; j < wynik[i].size(); j++) {
if (wynik[i][j] > 0)
{
if (tab[i][j] == 0) wolneNaTure += wynik[i][j];
else wynik[i - 1][tab[i][j]] += wynik[i][j];
}
else {
if (wolne > 0) {
--wolne;
++wynik[i - 1][tab[i][j]];
}
else {
++suma;
++wynik[i - 1][tab[i][j]];
}
if (tab[i][j] == 0) ++wolneNaTure;
}
}
wolne += wolneNaTure;
//cout << "====STATYSTKI DZIEN=" << i << "====" << '\n';
//cout << "SUMA=" << suma << '\n';
//cout << "WOLNE=" << wolne << '\n';
}
/*cout << "OUT:\n\n";
for (int i = 1; i <= 4; i++) {
for (auto iter : wynik[i])
cout << iter << ' ';
cout << '\n';
}*/
cout << suma << '\n';
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <iostream> #include <vector> #include <algorithm> using namespace std; constexpr int mx = 5e5 + 3; vector<int> tab[mx]; vector<int> wynik[mx]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int suma = 0, wolne = 0; int wolneNaTure; int dni, spotkania; cin >> dni >> spotkania; wynik[0].push_back(0); tab[0].push_back(0); tab[1].push_back(0); wynik[1].push_back(0); for (int i = 0; i < spotkania; i++) { tab[1].push_back(0); wynik[1].push_back(0); } int spotkaniaNaDzien; int x; for (int i = 2; i <= dni; i++) { cin >> spotkaniaNaDzien; tab[i].push_back(0); wynik[i].push_back(0); for (int j = 0; j < spotkaniaNaDzien; j++) { cin >> x; tab[i].push_back(x); wynik[i].push_back(0); } } for (int i = dni; i >= 1; i--) { wolneNaTure = 0; for (int j = 1; j < wynik[i].size(); j++) { if (wynik[i][j] > 0) { if (tab[i][j] == 0) wolneNaTure += wynik[i][j]; else wynik[i - 1][tab[i][j]] += wynik[i][j]; } else { if (wolne > 0) { --wolne; ++wynik[i - 1][tab[i][j]]; } else { ++suma; ++wynik[i - 1][tab[i][j]]; } if (tab[i][j] == 0) ++wolneNaTure; } } wolne += wolneNaTure; //cout << "====STATYSTKI DZIEN=" << i << "====" << '\n'; //cout << "SUMA=" << suma << '\n'; //cout << "WOLNE=" << wolne << '\n'; } /*cout << "OUT:\n\n"; for (int i = 1; i <= 4; i++) { for (auto iter : wynik[i]) cout << iter << ' '; cout << '\n'; }*/ cout << suma << '\n'; return 0; } |
English