zoukankan      html  css  js  c++  java
  • poj 2342 anniversary party

    题目大意:

    n个人的关系为一棵树,有一个party,邀请了一个人,那么就不能邀请n的上级,求最多能邀请到多少人

    思路:

    树形dp

    两个dp数组分别表示取n的时候的最大值和不取n的时候的最大值

    如果取n,那么dp1[n]=它所有儿子的dp2之和

    如果不取n,那么dp2[n]=它所有儿子的max(dp1,dp2)之和

    最后输出根的max(dp1,dp2)

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<vector>
    using namespace std;
    int ans,n,a[6020],dp[6020][2],x,t;
    vector <int> vec[6020];
    void dp1(int i)
    {
        if(vec[i].size()==0) {dp[i][0]=a[i];dp[i][1]=0;return ;}
        for(int j=0;j<vec[i].size();j++)
        {
            dp1(vec[i][j]);
            dp[i][0]+=dp[vec[i][j]][1];
            dp[i][1]+=max(dp[vec[i][j]][1],dp[vec[i][j]][0]);
        }
        dp[i][0]+=a[i];
        ans=max(ans,max(dp[i][1],dp[i][0]));
        return ;
    }
    int main()
    {
        scanf("%d",&n);
        int rt=0;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        if(n==1) {printf("%d",a[n]);return 0;}
        while(scanf("%d%d",&x,&t)&&x!=0)
        {
            if(rt==0) rt=t;
            if(x==rt) rt=t;
            vec[t].push_back(x);
        }
        dp1(rt);
        printf("%d",ans);
    }
    View Code
  • 相关阅读:
    Feature euerka Consul zookeeper etcd
    mysql配置参数
    镜像网站
    携程Apollo分布式配置中心部署以及使用
    linux 基础知识 之基础网络
    linux 基础知识 之基础系统管理
    linux安全
    java.多态
    java.抽象、接口
    使用Vscode
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7224314.html
Copyright © 2011-2022 走看看