#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; } |