Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- const int N = 1e6 + 6;
- int n, res;
- int dp[N];
- vector <int> g[N];
- void dfs(int v, int pr = -1) {
- vector <int> vec;
- for (int u : g[v]) {
- if (u == pr) continue;
- dfs(u, v);
- vec.push_back(dp[u]);
- }
- sort(vec.rbegin(), vec.rend());
- if (vec.empty()) {
- dp[v] = (int)g[v].size() + 1;
- } else {
- dp[v] = (int)g[v].size() + vec[0] - 1;
- }
- res = max(res, dp[v]);
- if (vec.size() >= 2) {
- res = max(res, vec[0] + vec[1] - 1 + (int)g[v].size() - 2);
- }
- }
- int main(){
- ios::sync_with_stdio(0);
- cin >> n;
- for (int i = 1; i < n; i++) {
- int u, v;
- cin >> u >> v;
- g[u].push_back(v);
- g[v].push_back(u);
- }
- dfs(1);
- for (int i = 1; i <= n; i++) {
- cout << dp[i] << " ";
- }
- cout << endl;
- cout << res << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement