#include <iostream>
#include <vector>
using namespace std;
struct Day
{
vector<int32_t> m_vInput;
vector<int32_t> m_vSpiesCnt;
size_t m_iSize;
Day() : m_iSize(0) {}
void Init(size_t iSize)
{
m_iSize = iSize;
m_vInput.clear();
m_vSpiesCnt.clear();
m_vSpiesCnt.resize(m_iSize, 0);
}
};
static int iDaysCnt, iMaxSpies;
static vector<Day> vDays;
static void ReadData()
{
int ni, aij;
cin >> iDaysCnt >> ni;
Day day;
day.Init(ni);
day.m_vInput.resize(ni, 0);
vDays.clear();
vDays.push_back(day);
for (int i = 2; i <= iDaysCnt; ++i)
{
cin >> ni;
day.Init(ni);
for (int j = 1; j <= ni; ++j)
{
cin >> aij;
day.m_vInput.push_back(aij);
}
vDays.push_back(day);
}
}
static void Solve()
{
int iLastDay = iDaysCnt - 1;
iMaxSpies = static_cast<int>(vDays[iLastDay].m_iSize);
int iNextDay = iLastDay;
for (int iDay = iLastDay - 1; iDay >= 0; --iDay, --iNextDay)
{
Day & dayCurr = vDays[iDay];
Day & dayNext = vDays[iNextDay];
for (size_t i = 0; i < dayNext.m_iSize; ++i)
{
if (dayNext.m_vSpiesCnt[i] == 0)
{
dayNext.m_vSpiesCnt[i] = 1;
}
}
for (size_t j = 0; j < dayNext.m_iSize; ++j)
{
int aij = dayNext.m_vInput[j];
if (aij == 0)
continue;
dayCurr.m_vSpiesCnt[aij - 1] += dayNext.m_vSpiesCnt[j];
}
int iSpiesThisDay = 0;
for (int32_t k : dayCurr.m_vSpiesCnt)
{
if (k == 0)
{
iSpiesThisDay++;
}
else
{
iSpiesThisDay += k;
}
}
if (iSpiesThisDay > iMaxSpies)
{
iMaxSpies = iSpiesThisDay;
}
}
}
int main()
{
// freopen("sample_input.txt", "r", stdin);
// freopen("sample_output.txt", "w", stdout);
ReadData();
Solve();
cout << iMaxSpies;
}
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include <iostream> #include <vector> using namespace std; struct Day { vector<int32_t> m_vInput; vector<int32_t> m_vSpiesCnt; size_t m_iSize; Day() : m_iSize(0) {} void Init(size_t iSize) { m_iSize = iSize; m_vInput.clear(); m_vSpiesCnt.clear(); m_vSpiesCnt.resize(m_iSize, 0); } }; static int iDaysCnt, iMaxSpies; static vector<Day> vDays; static void ReadData() { int ni, aij; cin >> iDaysCnt >> ni; Day day; day.Init(ni); day.m_vInput.resize(ni, 0); vDays.clear(); vDays.push_back(day); for (int i = 2; i <= iDaysCnt; ++i) { cin >> ni; day.Init(ni); for (int j = 1; j <= ni; ++j) { cin >> aij; day.m_vInput.push_back(aij); } vDays.push_back(day); } } static void Solve() { int iLastDay = iDaysCnt - 1; iMaxSpies = static_cast<int>(vDays[iLastDay].m_iSize); int iNextDay = iLastDay; for (int iDay = iLastDay - 1; iDay >= 0; --iDay, --iNextDay) { Day & dayCurr = vDays[iDay]; Day & dayNext = vDays[iNextDay]; for (size_t i = 0; i < dayNext.m_iSize; ++i) { if (dayNext.m_vSpiesCnt[i] == 0) { dayNext.m_vSpiesCnt[i] = 1; } } for (size_t j = 0; j < dayNext.m_iSize; ++j) { int aij = dayNext.m_vInput[j]; if (aij == 0) continue; dayCurr.m_vSpiesCnt[aij - 1] += dayNext.m_vSpiesCnt[j]; } int iSpiesThisDay = 0; for (int32_t k : dayCurr.m_vSpiesCnt) { if (k == 0) { iSpiesThisDay++; } else { iSpiesThisDay += k; } } if (iSpiesThisDay > iMaxSpies) { iMaxSpies = iSpiesThisDay; } } } int main() { // freopen("sample_input.txt", "r", stdin); // freopen("sample_output.txt", "w", stdout); ReadData(); Solve(); cout << iMaxSpies; } |
English