zoukankan      html  css  js  c++  java
  • Codeforces 1238F The Maximum Subtree dp

    The Maximum Subtree

    考虑good tree 长什么样子, 除了一点可以有2个儿子有儿子以外, 其余点最多只能有一个儿子有儿子。

    然后直接dp就好啦。

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mk make_pair
    using namespace std;
     
    const int N = (int)3e5 + 7;
     
    int n;
    int dp[N];
    int ans;
     
    vector<int> G[N];
     
    void update(pair<int, int> &A, int B) {
        if(B > A.fi) A = mk(B, A.fi);
        else A = mk(A.fi, max(A.se, B));
    }
     
    void dfs(int u, int fa) {
        dp[u] = 1;
        pair<int, int> mx(-1, -1);
        int child = 0, gg = 0;
        for(auto &v : G[u]) {
            if(v == fa) continue;
            child++;
            dfs(v, u);
            update(mx, dp[v]);
        }
        dp[u] = max(dp[u], mx.fi + child);
        if(child >= 2) ans = max(ans, mx.fi + mx.se + child - 1 + (fa != 0));
        ans = max(ans, dp[u]);
    }
     
    void init() {
        for(int i = 1; i <= n; i++) {
            G[i].clear();
        }
    }
    int main() {
        int T; scanf("%d", &T);
        while(T--) {
            scanf("%d", &n);
            init();
            ans = 1;
            for(int i = 1; i < n; i++) {
                int u, v;
                scanf("%d%d", &u, &v);
                G[u].push_back(v);
                G[v].push_back(u);
            }
            dfs(1, 0);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    4.18下午
    4.18上午
    2017.5.10-afternoon
    2017.5.9-afternoon
    2017.5.10-morning
    2017.5.9-morning
    2017.5.8-afternoon
    2017.5.8-morning
    2017.5.5-afternoon
    2017.5.5-morning
  • 原文地址:https://www.cnblogs.com/CJLHY/p/11640276.html
Copyright © 2011-2022 走看看