【HAOI 2010】软件安装

【Web实战】微信小程序逆向 2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。 阅读详情

题目描述

现在我们的手头有 NNN 个软件,对于一个软件 iii,它要占用 WiW_iWi​ 的磁盘空间,它的价值为 ViV_iVi​。我们希望从中选择一些软件安装到一台磁盘容量为 MMM 计算机上,使得这些软件的价值尽可能大(即 ViV_iVi​ 的和最大)。

但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件 jjj(包括软件 jjj 的直接或间接依赖)的情况下才能正确工作(软件 iii 依赖软件 jjj)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥的作用为 000。

我们现在知道了软件之间的依赖关系:软件 iii 依赖软件 DiD_iDi​。现在请你设计出一种方案,安装价值尽量大的软件。一个软件只能被安装一次,如果一个软件没有依赖则 Di=0D_i=0Di​=0,这时只要这个软件安装了,它就能正常工作。

0≤N≤1000\le N\le 1000≤N≤100,0≤M≤5000\le M\le 5000≤M≤500,0≤Wi≤M0\le W_i\le M0≤Wi​≤M,0≤Vi≤10000\le V_i\le 10000≤Vi​≤1000,0≤Di≤N0\le D_i\le N0≤Di​≤N,Di≠iD_i≠iDi​̸​=i。

算法分析

与金明的预算方案不同的是,这里的依赖关系可能会形成一个环,跑一边 Tarjan 算法缩环,如果我们选择了这个环中的一个节点,那么为了获得价值,该环内的每个点都必选,因此可以看成一个整体,缩环后整个图变成了一棵树,计算树上有依赖背包 DP 即可。

其实可以像 【JSOI 2016】最佳团体 那样进一步缩小枚举范围,但是这题不卡常,就懒得写了。

第一次写的时候居然先清空图再跑了 Tarjan,in[] 数组的必要性在于新图的根节点处可能是一个环。

代码实现

#include <cstdio>
#include <cstring>
#include <algorithm>
const int maxn=105;
const int maxm=505;
int head[maxn],ev[maxn],nxt[maxn],idx=0;
inline void add(int u,int v) {ev[++idx]=v;nxt[idx]=head[u];head[u]=idx;}
int dfn[maxn],low[maxn],dfnidx=0,sta[maxn],top=0;
int sccno[maxn],sccidx=0;
void tarjan(int x) {
    dfn[x]=low[x]=++dfnidx;sta[top++]=x;
    for(int i=head[x];i;i=nxt[i]) {
        int v=ev[i];
        if(!dfn[v]) {
            tarjan(v);
            low[x]=std::min(low[x],low[v]);
        }
        else if(!sccno[v]) low[x]=std::min(low[x],dfn[v]);
    }
    if(dfn[x]==low[x]) {
        ++sccidx;
        while(top) {
            int u=sta[--top];
            sccno[u]=sccidx;
            if(x==u) break;
        }
    }
}
int n,m,W[maxn],V[maxn],d[maxn];
int w[maxn],v[maxn],in[maxn],f[maxn][maxm];
void dfs(int x) {
    for(int i=0;i<=m;++i) f[x][i]=-0x3f3f3f3f;
    f[x][0]=0;if(w[x]<=m) f[x][w[x]]=v[x];
    for(int i=head[x];i;i=nxt[i]) {
        int v=ev[i];dfs(v);
        for(int j=m;j>=0;--j) {
            for(int k=0;k<=j-w[x];++k) {
                f[x][j]=std::max(f[x][j],f[x][j-k]+f[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;i<=n;++i) {
        scanf("%d",&d[i]);
        if(d[i]) add(d[i],i);
    }
    for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);
    memset(head,0,sizeof(head));idx=0;sccno[0]=0;
    for(int i=1;i<=n;++i) {
        w[sccno[i]]+=W[i];v[sccno[i]]+=V[i];
        if(d[i]&&sccno[d[i]]!=sccno[i]) {
            add(sccno[d[i]],sccno[i]);
            ++in[sccno[i]];
        }
    }
    for(int i=1;i<=sccidx;++i) if(!in[i]) add(0,i);
    dfs(0);
    int ans=-0x3f3f3f3f;
    for(int i=0;i<=m;++i) ans=std::max(ans,f[0][i]);
    printf("%d\n",ans);
    return 0;
}
基因家族的鉴定-基于Windows系统上的HMMER 基因家族的鉴定-基于Windows系统上的HMMER。 阅读详情

相关推荐

OpenClaw(小龙虾) 安装部署教程

OpenClaw(原名Clawdbot)是一个开源的、可本地部署的个人AI助理,它能接入飞书、钉钉等即时通讯工具,帮你处理邮件、管理文件,甚至控制电脑。

qq_40668700的博客 1382

P2515 [HAOI2010]软件安装

targan缩点加依赖背包

Salute 198

Zephyr RTOS -- 学习笔记总述

文章目录摘要1. 开发基础部分2. 内核服务入门 本笔记基于 Zephyr 版本 2.6.0-rc2 摘要 1. 开发基础部分 2. 内核服务入门 2.1 线程简介 2.2 线程 2.3 工作队列线程 2.4 调度 2.5 中断 2.6 轮询 API 2.7 信号量

思想给了我们太多的自由,而我们拖累了思想...... 4824

[HAOI2010]软件安装

连接可能成环,所以不能直接跑树形背包。先缩点,建一个新的图,跑一次树形背包即可。 注意跑背包时,应该是包括选当前节点的最大价值。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std;...

青烟绕指柔的博客 478

OpenEuler22.04 快速部署Docker:华为云镜像源配置指南

本文详细介绍了在OpenEuler 22.04系统上快速部署Docker的完整流程。针对系统默认源版本老旧的问题,重点讲解了如何配置华为云镜像源以加速安装,并涵盖Docker引擎、Docker Compose的安装、服务启动验证、权限配置、镜像加速等核心步骤与常见问题排查,帮助用户高效搭建稳定的容器化开发环境。

http9protocoller的博客 173

TT电机、310电机、370电机在智能小车与机器人中的性能对比与选型指南

本文深入对比了TT电机、310电机和370电机在智能小车与机器人项目中的核心性能差异。文章从尺寸、扭矩、转速、电压电流等关键参数入手,结合不同应用场景(如入门小车、竞技机器人、机械臂),提供了清晰的选型指南和驱动控制建议,帮助开发者根据项目需求选择最合适的电机方案。

weixin_29065015的博客 409

[HAOI2010] 软件安装

题目大意:现在我们的手头有 N 个软件,对于一个软件 i,它要占用 Wi​ 的磁盘空间,它的价值为 Vi​。我们希望从中选择一些软件安装到一台磁盘容量为 M 计算机上,使得这些软件的价值尽可能大(即 Vi​ 的和最大)。但是现在有个问题:软件之间存在依赖关系,即软件 i 只有在安装了软件 j(包括软件 j 的直接或间接依赖)的情况下才能正确工作(软件 i 依赖软件 j)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥的作用为 0。

pai6666的博客 376

点云从入门到精通技术详解100篇-基于三维点云的机器人抓取位姿检测(续)

集到的深度信息会存在噪点,因此需要将生成的场景点云进行预处理,获得平滑、降采样处理场景点云,本文设计的预处理操作更能从冗杂的场景点云中提取清晰、平滑的目标点云,便于后续的抓取位姿采样,提高后续算法的处理效率。因此需要对场景点云进行适当的分割,仅保留目标物体的点云,整个过程可以通过。场较小时,空间中的点云密度会更加提高;觉子系统的效率,再保持全局点云几何形状不改变的前提下,通过对目标点云进行。体素降采样可以快速地减少点云数据并同时保持点云的形。个点,由于我们实施抓取的目标物体只占整个场景点云图的一部分,

getusushu的博客 773

【洛谷 P2515】[HAOI2010]软件安装【图论+树形DP】

题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用W i 的磁盘空间,它的价值为V i 。我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即V i的和最大)。 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件i依赖软件j)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥的作用为0。 我们现在知道了软件之间的依赖关系:软件i依赖软件D i ​ 。现在请你设

绫 1185

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1471

YOLOv8训练流程-原理解析[目标检测理论篇]

本篇文章主要介绍了YOLOv8训练的流程,主要介绍了Task Aligned Assigner正负样本匹配策略以及YOLOv8的损失计算。

ice 4516

洛谷 P2515 [HAOI2010]软件安装

洛谷 P2515 [HAOI2010]软件安装 Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大)。 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件i依赖软...

weixin_30614109的博客 203

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6662

BZOJ 2427 HAOI2010 软件安装

2427: [HAOI2010]软件安装 Time Limit:10 SecMemory Limit:128 MBSubmit:1855Solved:730[Submit][Status][Discuss] Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M...

139

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

P2515 [HAOI2010] 软件安装

对于环,发现要么把这个环上的每一个点都选了,要么每一个都不选。发现构成的图是一个森林和一些环。对于森林,建一个虚点然后树形。

MC_wansui的博客 1069

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[bzoj2427][HAOI2010]软件安装 Tarjan+树形DP

时间是一切财富中最宝贵的财富。

Unlimited Code Works 502

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【BZOJ2427/HAOI2010】软件安装

                               2427: [HAOI2010]软件安装                                                  Time Limit: 10 Sec  Memory Limit: 128 MB                                                          ...

ETO的博客 277

HAOI 2010 软件安装(Tarjan+树形dp)

【HAOI2010 Day1】软件安装 问题描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M的计算机上,使得这些软件的价值尽可能大(即Vi的和最大)。 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件吗i依赖软件j)。幸运的

Mogician_Evian的博客 391

树形背包+Tarjan缩点 [HAOI2010]软件安装(洛谷 P2515)

[HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为MM计算机上,使得这些软件的价值尽可能大(即Vi​的和最大)。 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件ii依赖软件j)。幸运的是,一个软件最多依赖另外...

不知所云的博客 174

HAOI2010软件安装(树形背包)

HAOI2010软件安装(树形背包) 题意   有n个物品,每个物品最多会依赖一个物品,但一个物品可以依赖于一个不独立(依赖于其它物品)的物品,且可能有多个物品依赖一个物品,并且依赖关系可能形成一个环。现给你V的资金,问如何分配资金,可以使你的得到的总价值最大,请求出这个总价值。 解法   我以前写过对于普通依赖性背包的博客:noip2006金明的预算方案如果对依赖性背包不是很熟悉的同学可以先看一...

weixin_30246221的博客 125

bzoj 2427: [HAOI2010]软件安装(Trajan+树形DP)

2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1844  Solved: 723 [Submit][Status][Discuss] Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机

加载中... 424

bzoj2427[HAOI2010]软件安装

bzoj2427[HAOI2010]软件安装 题意: 有n个软件,每个大小为wi,价值为vi,同时每个软件依赖0个或一个其他软件,要求在大小不超过的m的前提下得到最大价值。n≤100,m≤500。 题解: 缩点然后做“树上背包dp”,具体看代码,注意里面用到了滚动数组。 代码: 1 #include <cstdio> 2 #include <cstring&...

weixin_33887443的博客 84
上一篇: 【POI 2005】Bank Notes
下一篇: 【SNOI 2017】英雄联盟
TungstenC
博客等级 码龄8年 1粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值