#include <iostream>
#include <vector>
#include <cstring>
#define MAXN 100000
#define QWQ printf("qwq\n");
using namespace std;
int dis[MAXN + 10], fat[MAXN + 10], far, F, E, len, n, k;
int f[MAXN + 10], MaxN = 0;
bool vis[MAXN + 10];
vector <int> gra[MAXN + 10];
void dfs(int u, int fa) {
int maxn = 0;
for(int p = 0; p < gra[u].size(); p++) {
int v = gra[u][p];
if(v == fa) continue;
dis[v] = dis[u] + 1;
dfs(v, u);
}
}
void calc() {
memset(dis, 0, sizeof(dis));
dfs(1, 0);
int maxn = 0;
len = 0;
for(int p = 1; p <= n; p++)
if(dis[p] > maxn)
maxn = dis[p], F = p;
dis[F] = 0;
dfs(F, 0), maxn = 0;
for(int p = 1; p <= n; p++)
if(dis[p] > maxn)
maxn = dis[p], E = p;
len = maxn;
}
void get_fat(int u, int fa) {
fat[u] = fa;
for(int p = 0; p < gra[u].size(); p++) {
int v = gra[u][p];
if(v == fa) continue;
get_fat(v, u);
}
}
void get() {
while(F != E) {
vis[F] = vis[E] = 1;
F = fat[F], E = fat[E];
}
}
void count(int u, int fa) {
for(int p = 0; p < gra[u].size(); p++) {
int v = gra[u][p];
if(v == fa) continue;
count(v, u);
int DIS = 1;
if(vis[u] + vis[v] == 2) DIS = -1;
MaxN = max(MaxN, f[u] + f[v] + DIS);
f[u] = max(f[u], f[v] + DIS);
}
}
int main() {
cin >> n >> k;
for(int p = 1, x, y; p < n; p++) {
cin >> x >> y;
gra[x].push_back(y);
gra[y].push_back(x);
}
calc();
if(k == 1) {
cout << (n - 1) * 2 - len + 1<< endl;
return 0;
}
else {
get_fat(1, 0);
get();
count(1, 0);
cout << (n - 1) * 2 - len - MaxN + 2 << endl;
}
}
RT
鬼知道我怎么是 85pts,目测和标准答案差 1 就离谱/dk