#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<pair<int, vector<int> > > platforms) {
for (int i = 0; i < platforms.size(); i++) {
cout << platforms[i].first << ": ";
for (int j = 0; j < platforms[i].second.size(); j++) {
cout << platforms[i].second[j] << " ";
}
cout << endl;
}
}
int main() {
std::ios::sync_with_stdio(false);
int n;
cin >> n;
vector<pair<int, vector<int> > > platforms;
int platformSize, tmp, last = 0;
for (int i = 0; i < n; i++) {
cin >> platformSize;
vector<int> platform;
if (platformSize > 0) {
for (int j = 0; j < platformSize; j++) {
cin >> tmp;
platform.push_back(tmp - 1);
}
} else {
platform.push_back(-1);
++last;
}
platforms.push_back(make_pair(0, platform));
}
int reset = 1, counter = 0, tmpNext;
bool first = true;
while (reset > 0) {
if (first) {
first = false;
--reset;
}
++counter;
int next = platforms[0].second[platforms[0].first];
if (platforms[0].first == 0) {
++reset;
}
platforms[0].first += 1;
platforms[0].first %= platforms[0].second.size();
if (platforms[0].first == 0) {
--reset;
}
while (next > -1) {
tmpNext = next;
if (platforms[tmpNext].first == 0) {
++reset;
}
next = platforms[next].second[platforms[next].first];
platforms[tmpNext].first = (platforms[tmpNext].first + 1) % (platforms[tmpNext].second.size());
if (platforms[tmpNext].first == 0) {
--reset;
}
}
}
cout << counter;
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 | #include <iostream> #include <vector> using namespace std; void printVector(vector<pair<int, vector<int> > > platforms) { for (int i = 0; i < platforms.size(); i++) { cout << platforms[i].first << ": "; for (int j = 0; j < platforms[i].second.size(); j++) { cout << platforms[i].second[j] << " "; } cout << endl; } } int main() { std::ios::sync_with_stdio(false); int n; cin >> n; vector<pair<int, vector<int> > > platforms; int platformSize, tmp, last = 0; for (int i = 0; i < n; i++) { cin >> platformSize; vector<int> platform; if (platformSize > 0) { for (int j = 0; j < platformSize; j++) { cin >> tmp; platform.push_back(tmp - 1); } } else { platform.push_back(-1); ++last; } platforms.push_back(make_pair(0, platform)); } int reset = 1, counter = 0, tmpNext; bool first = true; while (reset > 0) { if (first) { first = false; --reset; } ++counter; int next = platforms[0].second[platforms[0].first]; if (platforms[0].first == 0) { ++reset; } platforms[0].first += 1; platforms[0].first %= platforms[0].second.size(); if (platforms[0].first == 0) { --reset; } while (next > -1) { tmpNext = next; if (platforms[tmpNext].first == 0) { ++reset; } next = platforms[next].second[platforms[next].first]; platforms[tmpNext].first = (platforms[tmpNext].first + 1) % (platforms[tmpNext].second.size()); if (platforms[tmpNext].first == 0) { --reset; } } } cout << counter; return 0; } |
English