zoukankan      html  css  js  c++  java
  • b_mt_蚂蚁最优战术(简单树形dp)

    给一棵树,每个点有权值,让选择点,要求选择不相邻的点,求使得权值最大,在使得权值最大的情况下,求选择的点中最小的权值最大是多少

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    vector<int> g[N];
    int a[N], s[N][2], m[N][2];
    void dfs(int u, int fa) {
        s[u][1]=a[u];
        m[u][1]=a[u];
        for (int v : g[u]) {
            if (v==fa) continue;
            dfs(v,u);
            s[u][1]+=s[v][0];
            m[u][1]=min(a[u], m[v][0]);
            s[u][0]+=s[v][1];
            m[u][0]=m[v][1];
        }
    }
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n,k; cin>>n>>k;
        for (int i=1; i<=n; i++) cin>>a[i];
        for (int i=0; i<k; i++) {
            int u,v; cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        dfs(1,0);
        if (s[1][1] > s[1][0]) cout<<s[1][1]<<' '<<m[1][1];
        else cout<<s[1][0]<<' '<<m[1][0];
        return 0;
    }
    
  • 相关阅读:
    MyBatis中文文档
    网络编程
    Django
    Django
    Django
    Django
    Django
    Django
    Django
    Django
  • 原文地址:https://www.cnblogs.com/wdt1/p/14532881.html
Copyright © 2011-2022 走看看