该代码MLE了3~6与9~10点
#include<bits/stdc++.h>
using namespace std;
struct Tree{
int root,son[2];
}tr[105];
int width[105];
int dfs(int now,int depth){
width[depth]++;
int a1=depth,a2=depth;
if(tr[now].son[0]!=0) a1=dfs(tr[now].son[0],depth+1);
if(tr[now].son[1]!=0) a2=dfs(tr[now].son[1],depth+1);
return max(a1,a2);
}
int state[105];
int bfs(int now,int dist,int finish){
if(tr[now].root>0&&state[tr[now].root]==0){
state[tr[now].root]=1;
if(tr[now].root==finish){
cout<<dist+2;
exit(0);
}
bfs(tr[now].root,dist+2,finish);
}
if(tr[now].son[0]>0&&state[tr[now].son[0]]==0){
state[tr[now].son[0]]=1;
if(tr[now].son[0]==finish){
cout<<dist+1;
exit(0);
}
bfs(tr[now].son[0],dist+1,finish);
}
if(tr[now].son[1]>0&&state[tr[now].son[1]]==0){
state[tr[now].son[1]]=1;
if(tr[now].son[1]==finish){
cout<<dist+1;
exit(0);
}
bfs(tr[now].son[1],dist+1,finish);
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
if(tr[x].son[0]==0) tr[x].son[0]=y;
else tr[x].son[1]=y;
tr[y].root=x;
}
int depth,widthmax=0;
depth=dfs(1,1);
cout<<depth<<endl;
for(int i=1;i<=depth;i++) widthmax=max(widthmax,width[i]);
cout<<widthmax<<endl;
int x,y;
cin>>x>>y;
state[x]=1;
bfs(x,0,y);
return 0;
}
下面的代码AC了
#include<bits/stdc++.h>
using namespace std;
struct Tree{
int root,son[2];
}tr[105];
int width[105];
int dfs(int now,int depth){
width[depth]++;
int a1=depth,a2=depth;
if(tr[now].son[0]!=0) a1=dfs(tr[now].son[0],depth+1);
if(tr[now].son[1]!=0) a2=dfs(tr[now].son[1],depth+1);
return max(a1,a2);
}
int state[105];
void bfs(int now,int dist,int finish){
if(tr[now].root>0&&state[tr[now].root]==0){
state[tr[now].root]=1;
if(tr[now].root==finish){
cout<<dist+2;
exit(0);
}
bfs(tr[now].root,dist+2,finish);
}
if(tr[now].son[0]>0&&state[tr[now].son[0]]==0){
state[tr[now].son[0]]=1;
if(tr[now].son[0]==finish){
cout<<dist+1;
exit(0);
}
bfs(tr[now].son[0],dist+1,finish);
}
if(tr[now].son[1]>0&&state[tr[now].son[1]]==0){
state[tr[now].son[1]]=1;
if(tr[now].son[1]==finish){
cout<<dist+1;
exit(0);
}
bfs(tr[now].son[1],dist+1,finish);
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
if(tr[x].son[0]==0) tr[x].son[0]=y;
else tr[x].son[1]=y;
tr[y].root=x;
}
int depth,widthmax=0;
depth=dfs(1,1);
cout<<depth<<endl;
for(int i=1;i<=depth;i++) widthmax=max(widthmax,width[i]);
cout<<widthmax<<endl;
int x,y;
cin>>x>>y;
state[x]=1;
bfs(x,0,y);
return 0;
}
离谱。(大佬们别骂了我知道这样暴力确实很丑) (我知道我在暴搜没有LCA嘤嘤嘤) 叠甲.ing 求求大佬们看看是什么问题