蒟蒻如我
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<queue>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1e3,M=1e3,inf=0x3f3f3f;
struct edge{
int to,val,next;
edge(int to=0,int val=0,int next=0):to(to),val(val),next(next){}
}e[M];
int v,n,len=0,last[N];
int fa[N],dep[N];
void add(int from,int to,int val){
e[++len]=edge(to,val,last[from]); last[from]=len;
}
void dfs(int x,int fa){
for(int i=last[x];i;i=e[i].next){
int id=e[i].to;
if(id!=fa){
dep[id]=dep[x]+1;
dfs(id,x);
}
}
}
int main(){
scanf("%d%d",&v,&n);
fo(i,1,v-1){
int u,v;
scanf("%d%d",&u,&v);
add(u,v,1);
add(v,u,1);
}
dfs(0,-1);
int deep=-inf;
fo(i,1,v-1) deep=max(deep,dep[i]);
if(n<=deep) printf("%d\n",n+1);
else if(n>=deep+2*(v-deep-1)) printf("%d\n",v);
else printf("%d\n",deep+(n-deep)/2+1);
return 0;
}