#include <cstdio>
#include <vector>
using namespace std;
struct Node {
int id;
int i=0;
vector<Node*> neighbours;
void print() {
for (int i=0; i<neighbours.size(); i++) {
printf("%d->%d\n", this->id, this->neighbours[i]->id);
}
}
};
bool is_starting_setup(vector<Node> &tasmy) {
for (int i=0; i<tasmy.size(); i++) {
if (tasmy[i].i != 0) {
return false;
}
}
return true;
}
void pusc_walize(vector<Node> &tasmy) {
Node* current_node = &tasmy[0];
while(current_node->neighbours.size() > 0) {
Node* next_node = current_node->neighbours[current_node->i];
current_node->i = (current_node->i + 1) % current_node->neighbours.size();
current_node = next_node;
}
}
int main() {
int n;
int result=0;
vector<Node> tasmy;
scanf("%d", &n);
tasmy.resize(n);
for (int i=0; i<n; i++) {
int r;
tasmy[i].id = i + 1;
scanf("%d", &r);
for (int j=0; j<r; j++) {
int l;
scanf("%d", &l);
tasmy[i].neighbours.push_back(&tasmy[l - 1]);
}
}
pusc_walize(tasmy);
result++;
while(!is_starting_setup(tasmy)) {
pusc_walize(tasmy);
result++;
}
printf("%d", result);
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 | #include <cstdio> #include <vector> using namespace std; struct Node { int id; int i=0; vector<Node*> neighbours; void print() { for (int i=0; i<neighbours.size(); i++) { printf("%d->%d\n", this->id, this->neighbours[i]->id); } } }; bool is_starting_setup(vector<Node> &tasmy) { for (int i=0; i<tasmy.size(); i++) { if (tasmy[i].i != 0) { return false; } } return true; } void pusc_walize(vector<Node> &tasmy) { Node* current_node = &tasmy[0]; while(current_node->neighbours.size() > 0) { Node* next_node = current_node->neighbours[current_node->i]; current_node->i = (current_node->i + 1) % current_node->neighbours.size(); current_node = next_node; } } int main() { int n; int result=0; vector<Node> tasmy; scanf("%d", &n); tasmy.resize(n); for (int i=0; i<n; i++) { int r; tasmy[i].id = i + 1; scanf("%d", &r); for (int j=0; j<r; j++) { int l; scanf("%d", &l); tasmy[i].neighbours.push_back(&tasmy[l - 1]); } } pusc_walize(tasmy); result++; while(!is_starting_setup(tasmy)) { pusc_walize(tasmy); result++; } printf("%d", result); return 0; } |
English