#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1'000'000'000'000'000'000LL;
const int II = 2'000'000'000;
const ll M = 1'000'000'007LL;
const int N = 1'000'007;
vector<pair<int, int>> sk[N];
vector<int> vis[N], il[N];
int dod[N];
void Solve()
{
int n, m;
cin >> n >> m;
sk[1] = vector<pair<int, int>>(m, pair{1, 0});
vis[1] = vector<int>(m, 0); il[1] = vector<int>(m, 1);
for(int i = 0; i < m; ++i)
sk[1][i].nd = i;
for(int i = 2; i <= n; ++i)
{
cin >> m;
sk[i] = vector<pair<int, int>>(m, pair{i, 0});
vis[i] = vector<int>(m, 0); il[i] = vector<int>(m, 1);
int a;
for(int j = 0; j < m; ++j)
{
cin >> a;
sk[i][j].nd = j;
if(a == 0) continue;
--a;
sk[i][j] = sk[i - 1][a];
if(vis[i - 1][a] == 1)
++il[sk[i][j].st][sk[i][j].nd];
vis[i - 1][a] = 1;
}
}
int ans = 0;
for(int i = 1; i <= n; ++i)
{
for(int j = 0; j < (int)il[i].size(); ++j)
{
if(vis[i][j] == 0) ++dod[i + 1];
if(sk[i][j].st == i)
dod[i] -= il[i][j];
}
dod[i] += dod[i - 1];
if(dod[i] < 0)
ans -= dod[i];
dod[i] = max(dod[i], 0);
}
cout << ans << "\n";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
//int t; cin >> t;
//while(t--)
Solve();
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 | #include <bits/stdc++.h> using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1'000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1'000'000'007LL; const int N = 1'000'007; vector<pair<int, int>> sk[N]; vector<int> vis[N], il[N]; int dod[N]; void Solve() { int n, m; cin >> n >> m; sk[1] = vector<pair<int, int>>(m, pair{1, 0}); vis[1] = vector<int>(m, 0); il[1] = vector<int>(m, 1); for(int i = 0; i < m; ++i) sk[1][i].nd = i; for(int i = 2; i <= n; ++i) { cin >> m; sk[i] = vector<pair<int, int>>(m, pair{i, 0}); vis[i] = vector<int>(m, 0); il[i] = vector<int>(m, 1); int a; for(int j = 0; j < m; ++j) { cin >> a; sk[i][j].nd = j; if(a == 0) continue; --a; sk[i][j] = sk[i - 1][a]; if(vis[i - 1][a] == 1) ++il[sk[i][j].st][sk[i][j].nd]; vis[i - 1][a] = 1; } } int ans = 0; for(int i = 1; i <= n; ++i) { for(int j = 0; j < (int)il[i].size(); ++j) { if(vis[i][j] == 0) ++dod[i + 1]; if(sk[i][j].st == i) dod[i] -= il[i][j]; } dod[i] += dod[i - 1]; if(dod[i] < 0) ans -= dod[i]; dod[i] = max(dod[i], 0); } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //int t; cin >> t; //while(t--) Solve(); return 0; } |
English