#include <bits/stdc++.h>
using namespace std;
inline int read(){
int n=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){n=n*10+ch-'0';ch=getchar();};
return n;
}
typedef struct edge{
int s;
int side;
}edge;
vector<edge>mp[210];
int dis[110];
vector<int>bos(110,0);
int n,u,v;
void addage(int u,int v,int side){
edge edgea;
edgea.s=v;
edgea.side=side;
mp[u].push_back(edgea);
}
void spfa(int begin){
queue<int>que;
que.push(begin);
memset(dis,0x3f,sizeof(dis));
dis[begin]=0;
while(!que.empty()){
int q=que.front();
que.pop();
for(int i=0;i<mp[q].size();i++){
if(dis[mp[q][i].s]>dis[q]+mp[q][i].side){
dis[mp[q][i].s]=dis[q]+mp[q][i].side;
que.push(mp[q][i].s);
}
}
}
}
int main(){
n=read();
for(int i=1;i<n;i++){
u=read();
v=read();
addage(u,v,1);
addage(v,u,2);
}
u=read();
v=read();
spfa(1);
int ans=0;
for(int i=1;i<=n;i++) bos[dis[i]]++,ans=max(ans,dis[i]);
printf("%d\n",ans+1); ans=0;
for(int i=1;i<=n;i++) ans=max(ans,bos[i]);
printf("%d\n",ans);
spfa(u); printf("%d\n",dis[v]);
return 0;
}
1.二叉树一直不是很会建树,后面还是要找个时间补起来
2.利用邻接表建了树
3.spfa算自己写出来了,但是在加入队列那里犹豫了,实在不应该
4.快读的方法第一次接触
意义很大的一道题