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
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> graf;
vector<int> odw;
void dfs(int k, int rodz)
{
    int fl = 0;
    for(int i=0;i<graf[k].size();i++)
    {
        if(graf[k][i] != rodz)
        {
            fl = 1;
            dfs(graf[k][i], k);
        }
    }
    odw[k] = 0;
    for(int i=0;i<graf[k].size();i++)
    {
        if(graf[k][i] != rodz)
        {
            odw[k] += odw[graf[k][i]];
        }
    }
    if(odw[k] == 0)
    {
        odw[k] = 1;
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int k, n;
    cin >> k >> n;
    vector<int> eny(k);
    eny[0] = n;
    graf.resize(n);
    odw.resize(n, 0);
    int su_n = n, su_n2 = 0, el;
    for(int i=1;i<k;i++)
    {
        cin >> eny[i];
        //cout << su_n << ' ' << su_n2 << '\n';
        graf.resize(su_n+eny[i]);
        odw.resize(su_n+eny[i], 0);
        for(int y=0;y<eny[i];y++)
        {
            cin >> el;
            if(el > 0)
            {
                graf[su_n+y].push_back(su_n2+el-1);
                graf[su_n2+el-1].push_back(su_n+y);
            }
        }
        su_n2 = su_n;
        su_n += eny[i];
    }
    /*cout << '\n';
    for(int i=0;i<su_n;i++)
    {
        cout << i << ' ';
        for(int y=0;y<graf[i].size();y++)
        {
            cout << graf[i][y] << ' ';
        }
        cout << '\n';
    }*/
    int wyn = 0, ak = 0;
    for(int i=0;i<su_n;i++)
    {
        if(odw[i] == 0)
        {
            dfs(i, i);
        }
    }
    int ind = 0;
    for(int i=0;i<k;i++)
    {
        ak = 0;
        for(int y=0;y<eny[i];y++)
        {
            ak += odw[ind];
            ind += 1;
        }
        wyn = max(ak, wyn);
    }
    /*for(int i=0;i<k;i++)
    {
        cout << eny[i] << ' ';
    }
    cout << '\n';
    for(int i=0;i<su_n;i++)
    {
        cout << odw[i] << ' ';
    }*/
    cout << wyn;
    return 0;
}