• hdu 1520 (树形DP)


    dp[i][0]表示i不参加

    dp[i][1]表示i参加

    简单的树形dp




    #include<stdio.h>
    #include<string.h>
    #define N 6100
    #define inf 0x3fffffff
    int dp[N][2],vis[N],head[N],num,n,lo[N],mm;
    struct edge
    {
        int st,ed,next;
    }E[N*2];
    void addedge(int x,int y)
    {
        E[num].st=x;
        E[num].ed=y;
        E[num].next=head[x];
        head[x]=num++;
    }
    int max(int a,int b)
    {
        if(a>b)return a;
        return b;
    }
    void dfs(int u)
    {
        int v,i;
        dp[u][0]=0;
        dp[u][1]=lo[u];
        vis[u]=1;
        for(i=head[u];i!=-1;i=E[i].next)
        {
            v=E[i].ed;
            if(vis[v]==1)continue;
            dfs(v);
            dp[u][0]+=max(dp[v][1],dp[v][0]);
            dp[u][1]+=dp[v][0];
        }
    }
    int main()
    {
        int i,x,y;
        while(scanf("%d",&n)!=-1)
        {
            for(i=1;i<=n;i++)
                scanf("%d",&lo[i]);
            memset(head,-1,sizeof(head));
            num=0;
            while(scanf("%d%d",&x,&y),x||y)
            {
                addedge(x,y);
                addedge(y,x);
            }
            memset(vis,0,sizeof(vis));
            dfs(1);
            printf("%d
    ",dp[1][0]>dp[1][1]?dp[1][0]:dp[1][1]);
        }
        return 0;
    }


  • 相关阅读:
    uoj110
    11.28模拟赛D题解
    AT1219 歴史の研究
    P5906 【模板】回滚莫队&不删除莫队
    P4175 [CTSC2008]网络管理
    SP32952 ADAFTBLL
    CF1479D Odd Mineral Resource
    SP10707 COT2
    P4074 [WC2013] 糖果公园
    P6134 [JSOI2015]最小表示
  • 原文地址:https://www.cnblogs.com/riskyer/p/3228553.html
Copyright © 2020-2023  润新知