终于是道中文题了。。。。

当时考试的时候就考的这道题。。。。 果断GG。

思路:

因为有可能存在依赖环,所以呢 先要tarjan一遍 来缩点。

随后就进行一遍树形DP就好了。。

x表示当前的节点。j表示j的空间最多能放多少价值的软件。

状态转移方程:f[x][j]=max(f[x][j],f[x.son][k]+f[x][j-k])

题目说:软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作

这句话怎么翻译呢? 直接把W[i]以下的价值设为负无穷不就好了嘛。。

// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,xx,t=0,tot=0,cnt=0,top=0,maxx=0,low[105],dfn[105],s[105],p[105],D[105],f[505][505];
int first[105],next[105],v[105],W[105],WW[105],V[105],VV[105],vis[105],in[105];
void add(int x,int y){v[tot]=y,next[tot]=first[x];first[x]=tot++;}
void tarjan(int x){
low[x]=dfn[x]=++cnt;vis[x]=1;s[++top]=x;
for(int i=first[x];~i;i=next[i])
if(!dfn[v[i]])tarjan(v[i]),low[x]=min(low[x],low[v[i]]);
else if(vis[v[i]])low[x]=min(low[x],dfn[v[i]]);
if(low[x]==dfn[x]){t++;do xx=s[top--],vis[xx]=0,p[xx]=t,WW[t]+=W[xx],VV[t]+=V[xx];while(xx!=x);}
}
void dfs(int x){
for(int i=first[x];~i;i=next[i]){
dfs(v[i]);
for(int j=m;j>=0;j--)
for(int k=j;k>=0;k--)
f[x][j]=max(f[x][j],f[v[i]][k]+f[x][j-k]);
}
}
int main(){
memset(first,-1,sizeof(first));
memset(f,0xcf,sizeof(f));
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]),add(D[i],i);
for(int i=0;i<=n;i++)if(!dfn[i])tarjan(i);
memset(first,-1,sizeof(first));
for(int i=1;i<=n;i++)if(p[D[i]]!=p[i])add(p[D[i]],p[i]),in[p[i]]++;
for(int i=1;i<=t;i++)if(!in[i]&&i!=p[0])add(p[0],i);
for(int i=1;i<=t;i++)for(int j=WW[i];j<=m;j++)f[i][j]=VV[i];
dfs(p[0]);
printf("%d\n",f[p[0]][m]);
}

最新文章

  1. 在thinkphp中,写的博文标签多对多关系的标签频率统计算法
  2. Foundation -----&gt;NSNumber
  3. HA模式下历史服务器配置
  4. gerrit 修改前一次提交的方法(转载)
  5. SAE Java开发问题汇总
  6. JQuery Plugin 1 - Simple Plugin
  7. javascript正則表達式 &amp;quot;\b&amp;quot;问题
  8. mac os apache 配置方法详细介绍
  9. JMeter命令行方式运行时动态设置线程数及其他属性(动态传参)
  10. ubuntu14.04 升级mysql到5.7版本
  11. 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
  12. EF 数据版本号,处理具体使用方法 RowVersion / Timestamp 使用方法。进行自动处理并发修改
  13. 马哥Linux base学习笔记
  14. Fluent UDF【2】:学习途径
  15. easyui datagrid种编辑器combobox选择的值不显示解决方案
  16. 常用技巧之JS判断数组中某元素出现次数
  17. 程序人生:01如何做到招聘要求中的“要有扎实的Java基础”
  18. 【洛谷 P4219】 [BJOI2014]大融合(LCT)
  19. Yii apache配置站点出现400 Bad Request 的解决方法
  20. Ubuntu libpng png++安装

热门文章

  1. Java I/O streams
  2. 二分图的最大独立集 最大匹配解题 Hopcroft-Karp算法
  3. css3 flex 详解,可以实现div内容水平垂直居中
  4. 【Oracle】闪回技术
  5. phpExcel导出大量数据出现内存溢出错误的解决方法
  6. Angular ocLazyLoad 与ui-router的配合使用
  7. 图表库 - Highchart / Echart
  8. 【WebApp】IOS兼容问题
  9. pymmseg 安装方法以及乱码解决
  10. input[type=radio]选中的样式变化