题面

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

但是会有环,怎么办呢?

缩点!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. 0和5 (51Nod)

    小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前 ...

  2. CSS子元素在父元素中水平垂直居中的几种方法

    1. 水平居中(margin: auto;)子父元素宽度固定,子元素上设置 margin: auto; 子元素不能设置浮动,否则居中失效. #div1{ width: 300px; height: 3 ...

  3. CISCN final 几道web题总结

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

  4. Content:"\2715",特殊字符和图标

    原文 项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 1 2 3 4 5 6 7 8 9 10 ...

  5. laravel 链式组合查询数据

    laravel 链式组合查询数据 一.总结 一句话总结: - 就是链式操作的基本操作,因为返回的都是一直可以进行链式操作的对象,所以我们接收返回的对象即可 - $result = DB::table( ...

  6. 【转】Qt编写串口通信程序全程图文讲解

    本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自 ...

  7. nginx状态码

    200:服务器成功返回网页 403:服务器拒绝请求.404:请求的网页不存在 499:客户端主动断开了连接.500:服务器遇到错误,无法完成请求.502:服务器作为网关或代理,从上游服务器收到无效响应 ...

  8. Django admin site应用

    django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便.其使用和配置主要分为三个步骤: 1,创建超级用户 需要创建超级用户来登陆admin后台系统,在命令行中输入 pyth ...

  9. 负载均衡 | Nginx+Tomcat 动静分离实现负载均衡

    0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 基本配置这个文件,就可以实现负载了.但是里面的各 ...

  10. LC 638. Shopping Offers

    In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are ...