[树形DP][背包]luogu P2515 软件安装

Posted mastervan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[树形DP][背包]luogu P2515 软件安装相关的知识,希望对你有一定的参考价值。

https://www.luogu.org/problemnew/show/P2515

分析

沙雕题*2

这题就是随便做个树形背包,Tarjan缩点把价值和体积加起来而已

注意必须保留当前节点的价值和体积

 

技术图片
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
const int N=110;
const int M=510;
struct Graph 
    int u,v,nx;
g[N*N];
int cnt,list[N],deg[N];
int low[N],dfn[N],tme;
int stk[N],top;
bool instk[N];
int w[N],v[N],idw[N],idv[N],id[N],idcnt;
int n,m,rt;
int f[N][M];

void Add(int u,int v) 
    g[++cnt]=(Graph)u,v,list[u];list[u]=cnt;


void Tarjan(int u) 
    dfn[u]=low[u]=++tme;
    stk[++top]=u;instk[u]=1;
    for (int i=list[u];i;i=g[i].nx)
        if (!dfn[g[i].v]) 
            Tarjan(g[i].v);
            low[u]=min(low[u],low[g[i].v]);
        
        else if (instk[g[i].v]) low[u]=min(low[u],dfn[g[i].v]);
    if (low[u]==dfn[u])    
        idcnt++;
        do 
            id[stk[top]]=idcnt;idw[idcnt]+=w[stk[top]];idv[idcnt]+=v[stk[top]];
            instk[stk[top]]=0;
        
        while (stk[top--]!=u);
    


void DFS(int u) 
    if (idw[u]<=m) f[u][idw[u]]=idv[u];
    for (int i=idw[u]+1;i<=m;i++) f[u][i]=f[u][i-1];
    for (int i=list[u];i;i=g[i].nx) 
        DFS(g[i].v);
        for (int j=m;j>=idw[u];j--)
            for (int k=idw[g[i].v];k<=j-idw[u];k++)
                f[u][j]=max(f[u][j],f[u][j-k]+f[g[i].v][k]);
    


int main() 
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%d",&w[i]);
    for (int i=1;i<=n;i++) scanf("%d",&v[i]);
    for (int i=1,f;i<=n;i++) 
        scanf("%d",&f);
        if (f) Add(f,i);
    
    for (int i=1;i<=n;i++) if (!dfn[i]) Tarjan(i);
    memset(list,0,sizeof list);cnt=0;
    for (int i=1;i<=m;i++) if (id[g[i].u]!=id[g[i].v]) deg[id[g[i].v]]++,Add(id[g[i].u],id[g[i].v]);
    for (int i=1;i<=idcnt;i++) if (!deg[i]) Add(0,i);
    DFS(0);
    printf("%d",f[0][m]);
View Code

 

以上是关于[树形DP][背包]luogu P2515 软件安装的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P2515软件安装

luogu P2515 [HAOI2010]软件安装

20191110luogu3698小Q的棋盘 | 树形背包dp | 贪心

luogu P1272 重建道路 类似树上背包的树形dp

树形背包(边)调试毒瘤LuoGu P2015 二叉苹果树

Luogu5405 CTS2019氪金手游(容斥原理+树形dp)