#include <bits/stdc++.h>
using namespace std;
constexpr int S = 103;
typedef long long ll;
bool fix = true;
int n, a, act = 0;
vector<int> v[S];
int in[S];
int odw[S];
ll ile[S];
ll wynik;
ll nwd(ll aa, ll bb)
{
while(bb)
{
swap(aa %= bb, bb);
}
return aa;
}
ll nww(ll aa, ll bb)
{
return (aa / nwd(aa, bb)) * bb;
}
void update(ll aa)
{
wynik = nww(wynik, aa);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a;
v[i].resize(a);
for(int j = 0; j < a; j++)
{
cin >> v[i][j];
in[v[i][j]]++;
}
}
if(v[1].size() == 0)
{
cout << 1;
return 0;
}
wynik = v[1].size();
while(fix)
{
fix = false;
act++;
for(int i : v[1])
{
ile[i] = wynik / v[1].size();
odw[i] = act;
}
for(int i = 2; i <= n; i++)
{
if(in[i] != 0 && v[i].size() != 0)
{
if(ile[i] % v[i].size() != 0)
{
fix = true;
break;
}
for(int j : v[i])
{
if(odw[j] != act)
{
odw[j] = act;
ile[j] = ile[i] / v[i].size();
}
else
{
ile[j] += ile[i] / v[i].size();
}
}
}
}
if(fix)
{
wynik += v[1].size();
}
}
cout << wynik;
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <bits/stdc++.h> using namespace std; constexpr int S = 103; typedef long long ll; bool fix = true; int n, a, act = 0; vector<int> v[S]; int in[S]; int odw[S]; ll ile[S]; ll wynik; ll nwd(ll aa, ll bb) { while(bb) { swap(aa %= bb, bb); } return aa; } ll nww(ll aa, ll bb) { return (aa / nwd(aa, bb)) * bb; } void update(ll aa) { wynik = nww(wynik, aa); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n; i++) { cin >> a; v[i].resize(a); for(int j = 0; j < a; j++) { cin >> v[i][j]; in[v[i][j]]++; } } if(v[1].size() == 0) { cout << 1; return 0; } wynik = v[1].size(); while(fix) { fix = false; act++; for(int i : v[1]) { ile[i] = wynik / v[1].size(); odw[i] = act; } for(int i = 2; i <= n; i++) { if(in[i] != 0 && v[i].size() != 0) { if(ile[i] % v[i].size() != 0) { fix = true; break; } for(int j : v[i]) { if(odw[j] != act) { odw[j] = act; ile[j] = ile[i] / v[i].size(); } else { ile[j] += ile[i] / v[i].size(); } } } } if(fix) { wynik += v[1].size(); } } cout << wynik; return 0; } |
English