zoukankan      html  css  js  c++  java
  • HDOJ 1520 Anniversary party(树DP)

    题意:求树的最大点独立集中点的数目。

    View Code
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define N 6001
    int n,e;
    int w[N],first[N],next[N],v[N],p[N];
    int dp[N][2];
    void init()
    {
        e=0;
        memset(first,-1,sizeof(first));
        memset(p,0,sizeof(p));
        memset(dp,0,sizeof(dp));
    }
    void add(int a,int b)
    {
        v[e]=b;
        next[e]=first[a];
        first[a]=e++;
    }
    void dfs(int a)
    {
        dp[a][0]=0;
        dp[a][1]=w[a];
        int i,b;
        for(i=first[a];~i;i=next[i])
        {
            b=v[i];
            if(b==p[a]) continue;
            dfs(b);
            dp[a][0]+=max(dp[b][0],dp[b][1]);
            dp[a][1]+=dp[b][0];
        }
    }
    int main()
    {
        int a,b;
        while(~scanf("%d",&n))
        {
            init();
            for(int i=1;i<=n;i++)   scanf("%d",&w[i]);
            do
            {
                scanf("%d%d",&a,&b);
                if(!p[a])
                {
                    p[a]=b;
                    add(b,a);
                }
            }while(a|b);
            for(int i=1;i<=n;i++)
            {
                if(p[i]==0)
                {
                    dfs(i);
                    printf("%d\n",max(dp[i][0],dp[i][1]));
                    break;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    理解闭包
    .net 应用程序执行过程
    Lambda 表达式
    栈的应用
    C# string
    自包含 与 自描述
    C# 值类型 与 引用类型
    C# 装箱 与 拆箱
    sql server分页的两种方法比较
    九月天开博日志
  • 原文地址:https://www.cnblogs.com/algorithms/p/2689028.html
Copyright © 2011-2022 走看看