如果依赖关系出现环,那么对于一个环里的点,要么都选要么都不选,

所以每个环可以当成一个点,也就是强连通分量

然后就可以构造出一颗树,然后树形背包瞎搞一下就行了

注意要搞一个虚拟节点当根节点

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)的更多相关文章

  1. BZOJ2427: [HAOI2010]软件安装 tarjan+树形背包

    分析: 一开始我以为是裸的树形背包...之后被告知这东西...可能有环...什么!有环! 有环就搞掉就就可以了...tarjan缩点...建图记得建立从i到d[i]之后跑tarjan,因为这样才能判断 ...

  2. BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP

    BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...

  3. [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)

    2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1987  Solved: 791[Submit][Statu ...

  4. 【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包

    [BZOJ2427][HAOI2010]软件安装 Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为 ...

  5. 【BZOJ-2427】软件安装 Tarjan + 树形01背包

    2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 960  Solved: 380[Submit][Status ...

  6. bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)

    2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1053  Solved: 424[Submit][Statu ...

  7. 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...

  8. [BZOJ2427]:[HAOI2010]软件安装(塔尖+DP)

    题目传送门 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用${W}_{i}$的磁盘空间,它的价值为${V}_{i}$.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件 ...

  9. BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包

    Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...

随机推荐

  1. 在页面rem布局中用到的js代码

    在你的页面加入以下代码,就初步搞定了 function fontSize() { var view_width = document.getElementsByTagName('html')[0].g ...

  2. [UnityShader]点染队列、ZWrite和ZTest

    转载自:http://www.myexception.cn/mobile/1902628.html [UnityShader]渲染队列.ZWrite和ZTest 参考链接:http://blog.cs ...

  3. SpringCloud的学习记录(1)

    最近一段时间重新学习一边SpringCloud(有半年不用了),这里简单记录一下. 我用的是IntelliJ IDEA开发工具, SpringBoot的版本是2.1.3.RELEASE. 1. 构建M ...

  4. Trouble Shooting的一些感想(实时补充)

    最近一直做两个产品功能的Merge工作,代码Merge过来之后,发现了很多问题.经过Trouble Shooting,最终发现归根结底都是我们Merge的问题,例如有的Code没有Merge过来,Me ...

  5. Eclipse JSP 页面设置 charset=UTF-8

    windows —> Preferences —> 搜索框中输入:JSP,设置如下:

  6. Azure CDN:氮气加速已开启,司机们请做好准备

    在上一周,我们向各位小伙伴介绍了通过 Azure CDN 高级版服务为 HTTPS 应用加速的做法,漏掉的小伙伴可以点击这里穿越回去补课哦.那我们今天讲点什么呢?当然是 CDN 最重要的价值:改善应用 ...

  7. 动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案

    StringBuilder strSql=new StringBuilder(); strSql.Append("insert into HT_XunJiaMain("); str ...

  8. ubuntu查看nvidia显卡状态

    nvidia-smi 连续查看显卡状态 sudo watch nvidia-smi

  9. Git学习环境搭建和git对用户的增删改查命令

    git安装 windows下安装git git下载进入网址: https://git-scm.com/downloads 点击下载,进行安装,安装成功,你会看到图标,点击进入到git bash 查看g ...

  10. The service command supports only basic LSB actions (start, stop, restart, try-restart, reload,force-reload, status)

    # service iptables save The service command supports only basic LSB actions (start, stop, restart, t ...