zoukankan      html  css  js  c++  java
  • codevs1380 没有丧尸的舞会

    /*
    树形DP 而然我并不知道树在哪(....)
    f[x][0]表示x节点不参加舞会 以x为根的子树的最优解
    f[x][1]表示x节点参加舞会 以x为根的子树的最优解
    方程为:(so为x的儿子 so要枚举一下) 
    f[x][0]+=max(f[so][0],f[so][1]);
    f[x][1]+=f[so][0];
    初始化  f[i][1]= 输入的happy值
    最后比较 max(f[i][0],f[i][1]) i为根 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 6010
    using namespace std;
    int f[maxn][3],son[maxn][maxn],n,fa[maxn],x,y;
    void Dfs(int x)
    {
        for(int i=1;i<=son[x][son[x][0]];i++)
          {
              int so=son[x][i];
              Dfs(so);
              f[x][0]+=max(f[so][0],f[so][1]);
              f[x][1]+=f[so][0];
          }
    }
    int main()
    {
        scanf("%d",&n);
        int i,j;
        for(i=1;i<=n;i++)
          {
              scanf("%d",&f[i][1]);
              fa[i]=i;
          }
        while(1)
          {
              scanf("%d%d",&x,&y);
              if(x==0&&y==0)break;
              son[y][++son[y][0]]=x;
              fa[x]=y;
          }
        for(i=1;i<=n;i++)
          if(fa[i]==i)
            {
              Dfs(i);
              printf("%d
    ",max(f[i][0],f[i][1]));
            }
        return 0;
    }
  • 相关阅读:
    21班考试总结
    性别
    2019.08.20上课笔记2
    2019.08.20上课笔记3
    2019.08.20上课笔记1
    单词2
    数据类和运算符
    2019.08.14单词1
    2019.08.14上课笔记1
    request.get... getHeader 能取得的信息 参数
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5405593.html
Copyright © 2011-2022 走看看