zoukankan      html  css  js  c++  java
  • 洛谷P2014 选课

    树形背包QwQ

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define maxn 310
    
    using namespace std;
    
    struct node
    {
        int ed,nxt;
    };
    node edge[maxn<<1];
    int n,m,first[maxn],cnt;
    int num[maxn],siz[maxn],dp[maxn][maxn];
    
    inline void add_edge(int s,int e)
    {
        ++cnt;
        edge[cnt].ed=e;
        edge[cnt].nxt=first[s];
        first[s]=cnt;
        return;
    }
    
    inline void dfs(int now,int fa)
    {
        siz[now]=1;
        dp[now][0]=0;
        for(register int i=first[now];i;i=edge[i].nxt)
        {
            int e=edge[i].ed;
            if(e!=fa)
            {
                dfs(e,now);
                siz[now]+=siz[e];
                for(register int j=m;j>=0;--j)
                    for(register int k=min(j,siz[e]);k>=0;--k)
                        dp[now][j]=max(dp[now][j],dp[now][j-k]+dp[e][k]);
            }
        }
        if(now!=0)
           for(register int i=m;i>0;--i)
                dp[now][i]=dp[now][i-1]+num[now];
        return;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(register int i=1;i<=n;++i)
        {
            int e;
            scanf("%d%d",&e,&num[i]);
            add_edge(i,e);
            add_edge(e,i);
        }
        dfs(0,-1);
        printf("%d
    ",dp[0][m]);
        return 0;
    }
  • 相关阅读:
    返回top写法技巧
    实现页面跳转至本页面的某个地方
    电信项目总结
    Struts2 ---- result
    Oracle定时器
    Oracle序列重置
    struts2---访问WEB
    分析函数
    exists 的简单介绍
    Oracle 部门员工查询
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11829014.html
Copyright © 2011-2022 走看看