博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2427: [HAOI2010]软件安装
阅读量:6680 次
发布时间:2019-06-25

本文共 1825 字,大约阅读时间需要 6 分钟。

题目大意:

软件之间有依赖关系,若这款软件依赖的软件能产生贡献且这款软件被安装了则这款软件能产生vi的贡献,同时安装这款软件需要wi的内存。

问内存不超过m时所能得到的最大贡献。

题解:

若依赖关系存在环,显然要使得环中的任意一个软件产生贡献必须把整个环取了。

先缩点,把一个环当成一个物品,然后缩完点的图就是一棵树。

树上一个点被取了,他的父亲也必须被取。

做一遍背包就好了。

代码:

#include
#include
#include
using namespace std;int n,m,id,ti,cnt,top,in[1000005],x[1000005],f[505][505],last[1000005],dfn[1000005],low[1000005],stack[1000005],instack[1000005],belong[1000005],sw[1000005],sv[1000005],v[1000005],w[1000005];struct node{ int to,next;}e[1000005];void add(int a,int b){ e[++cnt].to=b; e[cnt].next=last[a]; last[a]=cnt;}void Tarjan(int x,int fa){ dfn[x]=low[x]=++ti; stack[++top]=x; instack[x]=1; for (int i=last[x]; i; i=e[i].next){ int V=e[i].to; if (!dfn[V]){ Tarjan(V,x); low[x]=min(low[x],low[V]); } else if (instack[V]) low[x]=min(low[x],dfn[V]); } if (low[x]==dfn[x]){ id++; int now=0; while (now!=x){ now=stack[top--]; instack[now]=0; belong[now]=id; sv[id]+=v[now]; sw[id]+=w[now]; } }}void dp(int x){ for (int i=last[x]; i; i=e[i].next){ int V=e[i].to; dp(V); for (int j=m-sw[x]; j>=0; j--) for (int k=0; k<=j; k++) f[x][j]=max(f[x][j],f[x][k]+f[V][j-k]); } for (int j=m; j>=0; j--){ if (j>=sw[x]) f[x][j]=f[x][j-sw[x]]+sv[x]; else f[x][j]=0; }}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",&x[i]); if (x[i]) add(x[i],i); } for (int i=1; i<=n; i++) if (!dfn[i]) Tarjan(i,0); cnt=0; memset(last,0,sizeof(last)); for (int i=1; i<=n; i++) if (x[i] && belong[x[i]]!=belong[i]){ add(belong[x[i]],belong[i]); in[belong[i]]++; } for (int i=1; i<=id; i++) if (!in[i]) { add(id+1,i); } dp(id+1); printf("%d\n",f[id+1][m]); return 0;}

  

转载于:https://www.cnblogs.com/silenty/p/8893489.html

你可能感兴趣的文章
模板变量,过滤器和静态文件引入
查看>>
Oracle 中的 Schema
查看>>
Web APi之认证(Authentication)两种实现方式后续【三】(十五)
查看>>
一条语句简单解决“每个Y的最新X”的SQL经典问题
查看>>
(转)链接服务器——获取EXCEL数据
查看>>
Go数组
查看>>
System.Web.Caching
查看>>
linux常用命令 2
查看>>
jquery中prop和attr的区别
查看>>
2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Problem K Tournament Wins
查看>>
台州学院we are without brain 训练 计算几何
查看>>
Webpack 代码分离
查看>>
ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题...
查看>>
extundelete
查看>>
powerviot install in sharepoint 2013
查看>>
javascript在我的工作的用法
查看>>
《告诉他们,我已乘白鹤去了》观后感——用生命换取信仰
查看>>
诡秘的“端口安全”功能
查看>>
市场活动课件:SQL Server 索引优化
查看>>
Linux程序包管理rpm命令的使用解析
查看>>