zoukankan      html  css  js  c++  java
  • 树形DP hdu1520

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 struct node
     7 {
     8     int fro,to,next;
     9 }e[36000000];
    10 int dp[6000][2];
    11 int num=0;
    12 int head[6000];
    13 int val[6000];
    14 bool isye[6000];
    15 
    16 void addEdge(int _fro,int _to)
    17 {
    18     num++;
    19     e[num].fro=_fro;
    20     e[num].to=_to;
    21     e[num].next=head[_fro];
    22     head[_fro]=num;
    23 }
    24 
    25 int dfs(int x)
    26 {
    27     dp[x][0]=0;
    28     dp[x][1]=val[x];
    29     for(int i=head[x];i!=-1;i=e[i].next)
    30     {
    31         int v=e[i].to;
    32         dfs(v);
    33         dp[x][0]+=max(dp[v][0],dp[v][1]);
    34         dp[x][1]+=dp[v][0];
    35     }
    36     return max(dp[x][0],dp[x][1]);
    37 }
    38 
    39 int main()
    40 {
    41     int n;
    42     while(scanf("%d",&n)!=EOF)
    43     {
    44         for(int i=1;i<=n;i++)
    45         {
    46             scanf("%d",&val[i]);
    47         }
    48         int a,b;
    49         for(int i=0;i<=n;i++)
    50         {
    51             head[i]=-1;
    52             isye[i]=true;
    53         }
    54         while(scanf("%d%d",&a,&b)!=EOF)
    55         {
    56             if(a==0&&b==0)
    57                 break;
    58             addEdge(b,a);
    59             isye[a]=false;
    60         }
    61         for(int i=1;i<=n;i++)
    62         {
    63             if(isye[i])
    64             {
    65                 cout<<dfs(i)<<endl;
    66             }
    67         }
    68     }
    69     return 0;
    70 }
    View Code
  • 相关阅读:
    airflow 安装问题
    ACM-单词接龙
    ACM-AK吧!少年
    ACM-Alice and Bob
    ACM-Satellite Photographs
    ACM-Subset sum
    ACM-Special Array
    数据挖掘-回归分析
    数据库原理-数据库系统的结构
    数据库原理-几种数据模型
  • 原文地址:https://www.cnblogs.com/wsruning/p/4768413.html
Copyright © 2011-2022 走看看