#include #include #include #include #include #include #include #include #include #include #include #include #define vll vector #define vvvl vector #define vvl vector> #define VV(a, b, c, d) vector>(a, vector(b, c)) #define VVV(a, b, c, d) vector(a, vvl(b, vll (c, d))); #define re(c, b) for(ll c=0;c maxDist) maxDist = dist, maxVertex = current; for (auto to : G[current]) { if (to == from) continue; treeDFS(current, to, dist + 1, maxDist, maxVertex); } } int getTreeDiameter(int s) { int start = s, end = 0, maxDist = 0; treeDFS(-1, start, 0, maxDist, end); start = end, end = 0, maxDist = 0; treeDFS(-1, start, 0, maxDist, end); //printf("start: %d, end: %d, diameter: %d\n", start, end, maxDist); return maxDist; } //_____________________________________________________________ int main(int argc, char const *argv[]) { ll n;std::cin >> n; re(i, n-1){ ll a, b;std::cin >> a >> b; G[a].push_back(b); G[b].push_back(a); } cout << n - 1 - getTreeDiameter(1) << "\n"; return 0; }