题目描述
小葱有一颗树,这棵树有n𝑛个节点,n−1𝑛−1条边,点的编号是1,2,⋯,n1,2,⋯,𝑛。
小葱对树很熟悉了,树的深度、树的各种遍历,她都会求。
现在小葱想知道树的宽度是多少!
小葱对宽度的定义是:树的的节点数最多的那一层的节点数。
输入描述
第一行一个数字n𝑛。 随后n−1𝑛−1行,每行一对数字,代表一条边。 最后一行一个数字,代表根节点的编号。
输出描述
一行一个数字,代表树的宽度。
输入输出样例
-
输入
复制6 1 2 1 3 1 4 3 5 4 6 1
输出
复制3
提示
对于30%30%的数据,2≤n≤1002≤𝑛≤100。 对于100%100%的数据,2≤n≤1052≤𝑛≤105。
#include<bits/stdc++.h>
using namespace std;
vector<int>adj[1000051];
int deep[100005];
int cnt[100005];
int ans=0;
void dfs(int u,int p){
deep[u] = deep[p] + 1;
cnt[deep[u]] ++;
ans = max(ans,cnt[deep[u]]);
for(auto &to : adj[u]){
if(to == p)continue;
dfs(to,u);
}
}
int main(){
int n;
cin >> n;
for(int i = 1;i < n;i ++){
int u,v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
int rt;
cin >> rt;
dfs(rt,0);
cout << ans;
return 0;
}