#ifdef _MSC_VER
#ifndef __GNUC__
#pragma warning(disable: 4996)
#endif
#define main main0
#endif
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int k, n1, wynik = 0;
vector<vector<int>> dni;
vector<int> osoby[2];
cin >> k >> n1;
dni.resize(k + 1);
dni[1].resize(n1 + 1);
for(int i = 2; i <= k; ++i) {
size_t ki;
cin >> ki;
dni[i].resize(ki + 1);
for(int j = 1; j <= ki; ++j)
cin >> dni[i][j];
}
int dzis = 1;
int wczoraj = 0;
int w;
osoby[dzis].resize(dni[k].size());
for(int i = k; i > 1; --i, dzis = wczoraj, wczoraj = 1 - dzis) {
osoby[wczoraj].resize(dni[i-1].size());
fill_n(osoby[wczoraj].begin(), dni[i-1].size(), 0);
w = 0;
for(int j = 1; j < dni[i].size(); ++j) {
int kontynuacja = dni[i][j];
int w1 = osoby[dzis][j] == 0 ? 1 : osoby[dzis][j];
if(kontynuacja > 0)
osoby[wczoraj][kontynuacja] += w1;
w += w1;
}
if(wynik < w)
wynik = w;
}
w = 0;
for(int i = 1; i < osoby[dzis].size(); ++i)
w += osoby[dzis][i] == 0 ? 1 : osoby[dzis][i];
if(wynik < w)
wynik = w;
cout << wynik << '\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 | #ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif #include <algorithm> #include <iostream> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int k, n1, wynik = 0; vector<vector<int>> dni; vector<int> osoby[2]; cin >> k >> n1; dni.resize(k + 1); dni[1].resize(n1 + 1); for(int i = 2; i <= k; ++i) { size_t ki; cin >> ki; dni[i].resize(ki + 1); for(int j = 1; j <= ki; ++j) cin >> dni[i][j]; } int dzis = 1; int wczoraj = 0; int w; osoby[dzis].resize(dni[k].size()); for(int i = k; i > 1; --i, dzis = wczoraj, wczoraj = 1 - dzis) { osoby[wczoraj].resize(dni[i-1].size()); fill_n(osoby[wczoraj].begin(), dni[i-1].size(), 0); w = 0; for(int j = 1; j < dni[i].size(); ++j) { int kontynuacja = dni[i][j]; int w1 = osoby[dzis][j] == 0 ? 1 : osoby[dzis][j]; if(kontynuacja > 0) osoby[wczoraj][kontynuacja] += w1; w += w1; } if(wynik < w) wynik = w; } w = 0; for(int i = 1; i < osoby[dzis].size(); ++i) w += osoby[dzis][i] == 0 ? 1 : osoby[dzis][i]; if(wynik < w) wynik = w; cout << wynik << '\n'; return 0; } |
English