[HAOI2010]软件安装 题解
这道题比较显然地,是一道树形背包;
但是会有环,怎么办呢?
缩点!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]软件安装 题解的更多相关文章
- BZOJ2427:[HAOI2010]软件安装——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2427 https://www.luogu.org/problemnew/show/P2515 现在 ...
- 【BZOJ2427】[HAOI2010]软件安装(动态规划,Tarjan)
[BZOJ2427][HAOI2010]软件安装(动态规划,Tarjan) 题面 BZOJ 洛谷 题解 看到这类题目就应该要意识到依赖关系显然是可以成环的. 注意到这样一个性质,依赖关系最多只有一个, ...
- Tarjan+树形DP【洛谷P2515】[HAOI2010]软件安装
[洛谷P2515][HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得 ...
- 【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包
[BZOJ2427][HAOI2010]软件安装 Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为 ...
- BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP
BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...
- 洛谷 P2515 [HAOI2010]软件安装 解题报告
P2515 [HAOI2010]软件安装 题目描述 现在我们的手头有\(N\)个软件,对于一个软件\(i\),它要占用\(W_i\)的磁盘空间,它的价值为\(V_i\).我们希望从中选择一些软件安装到 ...
- [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1987 Solved: 791[Submit][Statu ...
- bzoj 2427 [HAOI2010]软件安装 Tarjan缩点+树形dp
[HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2029 Solved: 811[Submit][Status][Dis ...
- bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1053 Solved: 424[Submit][Statu ...
随机推荐
- MySQL之pymysql
pymysql的安装 pip install PyMySQL 连接数据库 import pymysql db = pymysql.connect("数据库ip","用 ...
- Java数组分配内存空间
分配内存空间 数组名=new 数据类型[数组长度]: new关键字用来实现为数组或对象分配内存 数组具有固定的长度.获取数组的长度: 数组名.length 定义数组+分配内存空间 数据类型[]数组名= ...
- 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】
转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...
- Dubbo API 笔记——配置参考
版权声明:欢迎转载,请注明出处,谢谢! https://blog.csdn.net/benhuo931115/article/details/78457391 schema 配置参考 所有配置项分为三 ...
- Linux设备驱动程序 之 获取当前时间
墙上时间 内核一般通过jiffies来获取当前时间,该数值表示的是最近一次系统启动到当前的时间间隔,它和设备驱动程序无关,因为它的声明期只限于系统的运行期:但是驱动程序可以用jiffies来计算不同事 ...
- 解决Linux下Firefox无法启动的问题
在linux下使用Firefox连接被测系统的GUI,一次偶然操作导致linux系统运行缓慢,Firefox无法正常操作,从system monitor 杀掉所有java进程将Firefox强行关闭. ...
- 笔记:Hive的主要技术改进(Major Technical Advancements in Apache Hive)
http://web.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-14-2.pdf (辅助参考:https://cwiki.apa ...
- MACBOOK 破解wifi密码
MACBOOK 破解wifi密码 Table of Contents 1. 安装homebrew 2. 安装aircrack-ng 3. 获取wifi网卡信息 4. 获取所有可识别的wifi信息 5. ...
- ASP.NET的IIS映射
ASP.NET默认扩展名为.aspx,可是我们看到许多网站的扩展名很特别,比如校内的do.个性之余还可以实现简单的伪静态(即把后缀改为html) 不过相对URLRewriter来说,是有点简陋(只能改 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数 ...