// C5-WAL.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <map>
#include <vector>
#include <unordered_set>
using namespace std;
long long getGCD(long long n1, long long n2)
{
if(n1 == 0)
{
return n2;
}
return getGCD(n2 % n1, n1);
}
long long getLCM(long long n1, long long n2)
{
return (n1 / getGCD(n1, n2))* n2;
}
int main()
{
int n;
cin >> n;
int r, temp;
vector<int> outdeg(n);
vector<int> indeg(n);
unordered_set<int> processed;
vector<vector<int>> outs;
vector<vector<int>> ins(n);
vector<long long> lcms(n);
vector<int> toDo;
for (int i = 0; i < n; i++) {
cin >> r;
vector<int> singleOut;
for (int j = 0; j < r; j++) {
cin >> temp;
singleOut.push_back(temp-1);
ins[temp-1].push_back(i);
}
if (r == 0) {
toDo.push_back(i);
}
outs.push_back(singleOut);
outdeg[i] = r;
}
for (int i = 0; i < n; i++) {
indeg[i] = ins[i].size();
}
while (!toDo.empty())
{
vector<int> toDoCopy;
for (int i = 0; i < toDo.size(); i++) {
int label = toDo[i];
long long lcm = 1;
/*if (outs[label].size() != 0) {
lcm = outs[label].size();
}*/
for (int j = 0; j < outs[label].size(); j++) {
int out = outs[label][j];
lcm = getLCM(lcms[out], lcm);
}
if (outs[label].size() == 0) {
lcm = 1;
}
else {
lcm = lcm * outs[label].size();
//lcm = getLCM(lcm,outs[label].size());
//lcm = lcm* getGCD(lcm, outs[label].size());
}
lcms[label] = lcm;
for (int j = 0; j < ins[label].size(); j++) {
int incoming = ins[label][j];
outdeg[incoming]--;
if (outdeg[incoming] == 0) {
toDoCopy.push_back(incoming);
}
}
}
toDo = toDoCopy;
}
if (lcms[0] == 0) {
cout << 1;
}
else {
cout << lcms[0];
}
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
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 | // C5-WAL.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include <map> #include <vector> #include <unordered_set> using namespace std; long long getGCD(long long n1, long long n2) { if(n1 == 0) { return n2; } return getGCD(n2 % n1, n1); } long long getLCM(long long n1, long long n2) { return (n1 / getGCD(n1, n2))* n2; } int main() { int n; cin >> n; int r, temp; vector<int> outdeg(n); vector<int> indeg(n); unordered_set<int> processed; vector<vector<int>> outs; vector<vector<int>> ins(n); vector<long long> lcms(n); vector<int> toDo; for (int i = 0; i < n; i++) { cin >> r; vector<int> singleOut; for (int j = 0; j < r; j++) { cin >> temp; singleOut.push_back(temp-1); ins[temp-1].push_back(i); } if (r == 0) { toDo.push_back(i); } outs.push_back(singleOut); outdeg[i] = r; } for (int i = 0; i < n; i++) { indeg[i] = ins[i].size(); } while (!toDo.empty()) { vector<int> toDoCopy; for (int i = 0; i < toDo.size(); i++) { int label = toDo[i]; long long lcm = 1; /*if (outs[label].size() != 0) { lcm = outs[label].size(); }*/ for (int j = 0; j < outs[label].size(); j++) { int out = outs[label][j]; lcm = getLCM(lcms[out], lcm); } if (outs[label].size() == 0) { lcm = 1; } else { lcm = lcm * outs[label].size(); //lcm = getLCM(lcm,outs[label].size()); //lcm = lcm* getGCD(lcm, outs[label].size()); } lcms[label] = lcm; for (int j = 0; j < ins[label].size(); j++) { int incoming = ins[label][j]; outdeg[incoming]--; if (outdeg[incoming] == 0) { toDoCopy.push_back(incoming); } } } toDo = toDoCopy; } if (lcms[0] == 0) { cout << 1; } else { cout << lcms[0]; } } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file |
English