rt,题目限制125m,但是在数组开到1e2的情况下依旧会mle2个点,求问哪里内存爆了 https://www.luogu.com.cn/record/132505429
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10,M=N<<1;
int n,k,x,y,z;
int h[N],e[M],w[M],ne[M],idx;
int f[N],fa[N],ans;
bool vis[N];
struct node{
int dis,num;
};
void add(int x,int y,int z){
e[++idx]=y;
w[idx]=z;
ne[idx]=h[x];
h[x]=idx;
}
node bfs(int s,int flag){
memset(vis,0,sizeof vis);
queue<node>q;
q.push((node){s,0});
int maxt,maxn;
node ns;
vis[s]=1;
while(!q.empty()){
ns=q.front();
q.pop();
int u=ns.num;
if(ns.dis>maxt){
maxt=ns.dis;
maxn=ns.num;
}
for(int i=h[u];i;i=ne[i]){
int v=e[i];
if(!vis[v]){
vis[v]=1;
q.push((node){ns.dis+w[i],v});
if(flag)fa[v]=u;
}
}
}
return (node){maxt,maxn};
}
int dfs(int u,int fa){
for(int i=h[u];i;i=ne[i]){
int v=e[i];
if(v!=fa){
dfs(y,x);
if(ans<f[x]+f[y]+w[i]){
ans=f[x]+f[y]+w[i];
}
f[x]=max(f[x],f[y]+w[i]);
}
}
return ans;
}
void change(int x){
while(f[x]){
int u=f[x];
for(int i=h[u];i;i=ne[i]){
if(e[i]==x){
w[i]=-1;
break;
}
}
for(int i=h[x];i;i=ne[i]){
if(e[i]==u){
w[i]=-1;
break;
}
}
x=u;
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n-1;i++){
cin>>x>>y;
add(x,y,1);
add(y,x,1);
}
node b1=bfs(1,0);
node b2=bfs(b1.num,1);
int d1=b2.dis;
int d2=1;
change(b1.num);
if(k==2){
d2=dfs(1,0);
cout<<2*n-d1-d2<<endl;
}else{
cout<<2*n-d1+1<<endl;
}
return 0;
}