#include <cstdio>
#include <cstdlib>
#include <vector>
#include "kollib.h"
#include "message.h"
using namespace std;
int mini(int a, int b) {
return a > b ? b : a;
}
int main() {
int n = NumberOfStudents(), m = NumberOfQueries();
int id = MyNodeId();
int nodes = NumberOfNodes();
if (id == 0) {
vector<int> okrag(n+1);
okrag[1] = 0;
int prev = 1;
int next = FirstNeighbor(1);
while (next != 1) {
okrag[next] = okrag[prev] + 1;
int a = FirstNeighbor(next), b = SecondNeighbor(next);
if (a != prev) {
prev = next;
next = a;
} else {
prev = next;
next = b;
}
}
vector<int> result(m+1, -1);
for (int i = 1; i <= m; i++) {
int a = QueryFrom(i), b = QueryTo(i);
int odl = (okrag[b] > okrag[a]) ? okrag[b] - okrag[a] : okrag[a] - okrag[b];
odl = mini(odl, n - odl);
result[i] = odl;
}
for (int i = 1; i <= m; ++i) {
printf("%d\n", result[i]);
}
}
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 | #include <cstdio> #include <cstdlib> #include <vector> #include "kollib.h" #include "message.h" using namespace std; int mini(int a, int b) { return a > b ? b : a; } int main() { int n = NumberOfStudents(), m = NumberOfQueries(); int id = MyNodeId(); int nodes = NumberOfNodes(); if (id == 0) { vector<int> okrag(n+1); okrag[1] = 0; int prev = 1; int next = FirstNeighbor(1); while (next != 1) { okrag[next] = okrag[prev] + 1; int a = FirstNeighbor(next), b = SecondNeighbor(next); if (a != prev) { prev = next; next = a; } else { prev = next; next = b; } } vector<int> result(m+1, -1); for (int i = 1; i <= m; i++) { int a = QueryFrom(i), b = QueryTo(i); int odl = (okrag[b] > okrag[a]) ? okrag[b] - okrag[a] : okrag[a] - okrag[b]; odl = mini(odl, n - odl); result[i] = odl; } for (int i = 1; i <= m; ++i) { printf("%d\n", result[i]); } } return 0; } |
English