[BZOJ2427][HAOI2010]软件安装(tarjan+树形DP)
如果依赖关系出现环,那么对于一个环里的点,要么都选要么都不选,
所以每个环可以当成一个点,也就是强连通分量
然后就可以构造出一颗树,然后树形背包瞎搞一下就行了
注意要搞一个虚拟节点当根节点
Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 2010
using namespace std; struct info{int to,nex;}e[N],ne[N];
int n,m,w[N],v[N],tot,head[N],d[N],in[N];
int dfn[N],low[N],scc,tp,sta[N],bl[N],wei[N],val[N],dp[N][N];
bool inq[N]; void Link(int u,int v){
e[++tot].nex=head[u];head[u]=tot;e[tot].to=v;
} inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} void tarjan(int u){
dfn[u]=low[u]=++tot;
sta[++tp]=u,inq[u]=1;
for(int i=head[u],v;i;i=e[i].nex)
if(!dfn[v=e[i].to]) tarjan(v),low[u]=min(low[u],low[v]);
else if(inq[v]) low[u]=min(low[u],dfn[v]);
if(dfn[u]==low[u]){
++scc;
for(int v=0;v!=u;)inq[v=sta[tp--]]=0,bl[v]=scc;
}
} void DP(int u){
for(int i=wei[u];i<=m;++i) dp[u][i]=val[u];
for(int i=head[u],v;i;i=e[i].nex){
DP(v=e[i].to);
for(int j=m-wei[u];j>=0;--j)
for(int k=0;k<=j;++k)
dp[u][j+wei[u]]=max(dp[u][j+wei[u]],dp[u][j+wei[u]-k]+dp[v][k]);
}
} int main(){
n=read(),m=read();
for(int i=1;i<=n;w[i++]=read());
for(int i=1;i<=n;v[i++]=read());
for(int i=1;i<=n;++i) if(d[i]=read()) Link(d[i],i);
tot=0;
for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);
tot=0,memset(head,0,sizeof(head)),memset(e,0,sizeof(e));
for(int i=1;i<=n;++i){
wei[bl[i]]+=w[i],val[bl[i]]+=v[i];
if(bl[i]!=bl[d[i]]&&d[i]) Link(bl[d[i]],bl[i]),in[bl[i]]++;
}
++scc;
for(int i=1;i<scc;++i) if(!in[i]) Link(scc,i);
DP(scc);
printf("%d\n",dp[scc][m]);
return 0;
}
[BZOJ2427][HAOI2010]软件安装(tarjan+树形DP)的更多相关文章
- BZOJ2427: [HAOI2010]软件安装 tarjan+树形背包
分析: 一开始我以为是裸的树形背包...之后被告知这东西...可能有环...什么!有环! 有环就搞掉就就可以了...tarjan缩点...建图记得建立从i到d[i]之后跑tarjan,因为这样才能判断 ...
- BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP
BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...
- [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1987 Solved: 791[Submit][Statu ...
- 【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包
[BZOJ2427][HAOI2010]软件安装 Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为 ...
- 【BZOJ-2427】软件安装 Tarjan + 树形01背包
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 960 Solved: 380[Submit][Status ...
- bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1053 Solved: 424[Submit][Statu ...
- 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...
- [BZOJ2427]:[HAOI2010]软件安装(塔尖+DP)
题目传送门 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用${W}_{i}$的磁盘空间,它的价值为${V}_{i}$.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件 ...
- BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包
Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...
随机推荐
- SASS简介及使用方法
一.什么是Sass Sass (Syntactically Awesome StyleSheets)是css的一个扩展开发工具,它允许你使用变量.条件语句等,使开发更简单可维护.这里是官方文档. 二. ...
- svg的基本图形与属性【小尾巴的svg学习笔记1】
因为项目有可能用到, 所以学习了一下,做此笔记,图截自慕课网,侵删. 一.基本图形 1.矩形 x,y定义矩形的左上角坐标: width,height定义矩形的长度和宽度: rx,ry定义矩形的圆角半径 ...
- SQLServer:执行计划
http://www.cnblogs.com/kissdodog/category/532309.html
- Jmeter入门6 参数化—CSV Data Set Config 通过文件导入数据
线程组循环次数大于1的时候,请求里每次提交的数据都相同.有的系统限制了不能提交相同数据,我们通过 CSV Data Set Config 加载csv文件数据. 1 创建一个文本文件,输入参数值保存为. ...
- RF脚本中的坑1: SyntaxError: invalid token
话不多说,直接上调试脚本: 执行后${b}=8:没问题.然后${a}改成08继续: 执行后居然报错了: 经过多次尝试08或者09时,都会报SyntaxError错误:后来查阅语法,才恍然大悟:Pyth ...
- DP,得到最多苹果,(POJ2385)
题目链接:http://poj.org/problem?id=2385 题意: 牛在两棵苹果树下收集苹果,牛只能在这两棵树之间走动w次,在t时刻,某棵树会掉下苹果. 解题报告: ///dp[t][w] ...
- 网格中的BFS,逆向(POJ2049)
题目链接:http://poj.org/problem?id=2049 解题报告: 网格中的BFS,最主要的是边界问题. 1.这里在左右,上下两个方向上,分别判断墙,和门,细节是,向上有t个墙,for ...
- 关于VMware给系统分区扩容的一点经验
我的VMware版本是8.0.6 build-1035888,里面安装的是Windows XP SP3 首先,在VM关机状态下使用Hard disk设置中的Utilities下的Expand给整个磁盘 ...
- linq 和lambda查询
EF 查询的两种 写法. linq 方法 或者 lambda方法 其中 ,只有tolist()的时候,才会真正的 在数据库中执行. 如果没有 tolist 方法,那么province1是 iqueab ...
- matlab 下载
Obrazy DVD programu Matlab ke stažení Verze 2015b Verze 2015a Verze 2014b Verze 2014a Verze 2012b Ve ...