题面

这道题比较显然地,是一道树形背包;

但是会有环,怎么办呢?

缩点!tarjan缩点!

然后在新图上跑树形背包就可以AC了

#include <bits/stdc++.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int head[1010],cnt,head2[1010],cnt2;
class littlestar{
public:
int to,nxt;
void add(int u,int v){
to=v;nxt=head[u];
head[u]=cnt;
}
void add2(int u,int v){
to=v;nxt=head2[u];
head2[u]=cnt2;
}
}star[20010],star2[20010];
int n,m;
int a[210],b[210];
int tmp[210];
int low[210],dfn[210],st[210],top;
int cur,co[210],col;
void tarjan(int u)
{
low[u]=dfn[u]=++cur;
st[++top]=u;
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(!co[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
co[u]=++col;
while(st[top]!=u){
co[st[top]]=col;
--top;
}
--top;
}
}
int S;
int f[110][1100];
int cost[210],val[210];
void dfs(int u,int fa)
{
for(int j=m;j>=cost[u];j--){
f[u][j]=max(f[u][j],f[u][j-cost[u]]+val[u]);
}
for(int i=head2[u];i;i=star2[i].nxt){
int v=star2[i].to;
if(v==fa) continue;
dfs(v,u);
for(int j=m;j>=0;j--){
for(int k=j-cost[u];k>=0;k--){
f[u][j]=max(f[u][j],f[v][k]+f[u][j-k]);
}
}
}
}
int father[110],rudu[110];
int main()
{
scanf("%d%d",&n,&m);
S=n+1;
inc(i,1,n) scanf("%d",&a[i]);
inc(i,1,n) scanf("%d",&b[i]);
inc(i,1,n){
int pre; scanf("%d",&pre);
father[i]=pre;
if(pre==0) tmp[++tmp[0]]=i;
else{
star[++cnt].add(pre,i);
}
}
inc(i,1,n){
if(!dfn[i]) tarjan(i);
}
inc(i,1,n){
cost[co[i]]+=a[i];
val[co[i]]+=b[i];
}
inc(i,1,n){
if(father[i]!=0&&co[father[i]]!=co[i]){
star2[++cnt2].add2(co[father[i]],co[i]);
rudu[co[i]]++;
}
}
inc(i,1,col){
if(rudu[i]==0){
star2[++cnt2].add2(S,i);
}
}
dfs(S,0);
int ans=0;
inc(i,0,m){
ans=max(ans,f[S][i]);
}
cout<<ans;
}
/* */

[HAOI2010]软件安装 题解的更多相关文章

  1. BZOJ2427:[HAOI2010]软件安装——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2427 https://www.luogu.org/problemnew/show/P2515 现在 ...

  2. 【BZOJ2427】[HAOI2010]软件安装(动态规划,Tarjan)

    [BZOJ2427][HAOI2010]软件安装(动态规划,Tarjan) 题面 BZOJ 洛谷 题解 看到这类题目就应该要意识到依赖关系显然是可以成环的. 注意到这样一个性质,依赖关系最多只有一个, ...

  3. Tarjan+树形DP【洛谷P2515】[HAOI2010]软件安装

    [洛谷P2515][HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得 ...

  4. 【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包

    [BZOJ2427][HAOI2010]软件安装 Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为 ...

  5. BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP

    BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...

  6. 洛谷 P2515 [HAOI2010]软件安装 解题报告

    P2515 [HAOI2010]软件安装 题目描述 现在我们的手头有\(N\)个软件,对于一个软件\(i\),它要占用\(W_i\)的磁盘空间,它的价值为\(V_i\).我们希望从中选择一些软件安装到 ...

  7. [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)

    2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1987  Solved: 791[Submit][Statu ...

  8. bzoj 2427 [HAOI2010]软件安装 Tarjan缩点+树形dp

    [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2029  Solved: 811[Submit][Status][Dis ...

  9. bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)

    2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1053  Solved: 424[Submit][Statu ...

随机推荐

  1. Go语言编程中字符串切割方法小结

    1.func Fields(s string) []string,这个函数的作用是按照1:n个空格来分割字符串最后返回的是[]string的切片 复制代码代码如下: import ( "fm ...

  2. CISCN final 几道web题总结

    因为都有源码,所以这里直接从源码开始分析: 1.Easy web 这道题本来的意思应该是通过注入来load_file读取config.php来泄露cookie的加密密钥,从而伪造身份进行登陆再上传sh ...

  3. DS博客作业04--树大作业

    1.树的存储结构 本组采用的树的存储结构为链式结构,选择如图所示的结构体 Name为结点的名称 LevelNum为孩子节点的个数 *Children[20]用来指向不同的孩子结点(类似于二叉树的结构体 ...

  4. R语言:as.Date出现NA值

    > head(as.Date(data$日期,'%y%M%D'))[1] NA NA NA NA NA NA data日期格式如下: 解决办法: > head(as.Date(data$日 ...

  5. Android跨进程通信Messenger

    一.概述 我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的ha ...

  6. react-native关闭所有黄色警告

    写RN经常会遇到黄色警告,很无奈,很多很多的黄色警告都是由组件自己导致的,建议在index.js 内的 AppRegistry.registerComponent('shareFile', () =& ...

  7. SSH整合入门案例

    package loaderman.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import ...

  8. 深度学习之加载VGG19模型获取特征图

    1.加载VGG19获取图片特征图 # coding = utf-8 import tensorflow as tf import numpy as np import matplotlib.pyplo ...

  9. /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found(转载)

    原文地址:https://blog.csdn.net/EI__Nino/article/details/100086157 终极一战 绝命一击 ImportError: /lib64/libstdc+ ...

  10. 用C#做成的程序如何打包部署,在其他PC机运行

    刚刚接触C#,在linux下面做习惯了c和c++,在本机运行OK后,得瑟的去别的机子,居然运行不了,你妹啊,怎么回事,没有.NET Framework,原来和java类似,.NET Framework ...