bzoj 4711 小奇挖矿 —— 树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711
就是树形DP,然而也想了半天才把转移想清楚;
f[x][j][0] 表示 x 去上面 j 步的仓库,f[x][j][1] 表示 x 去子树内下去 j 步的仓库而且整个子树都算好了;
f[x][j][0] 就是 d[j] 加上儿子们的 f[u][...][1] 与 f[u][j+1][0] 的最小值;
f[x][j][1] 就是选一个儿子加它的 f[u][j-1][1],其它儿子是 f[u][...][1] 与 f[u][j+1][0] 的最小值;
f[x][0][1] 要特殊处理一下;
然后一交秒WA,又改了改,似乎也没改什么,就A了...总之注意边界。
代码如下:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int const xn=,inf=0x3f3f3f3f;
- int n,K,d[xn],ans,f[xn][xn][],mn[xn];
- int hd[xn],ct,nxt[xn<<],to[xn<<];
- int rd()
- {
- int ret=,f=; char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
- while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
- return f?ret:-ret;
- }
- void add(int x,int y){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct;}
- void dfs(int x,int fa)
- {
- for(int i=hd[x],u;i;i=nxt[i])
- {
- if((u=to[i])==fa)continue;
- dfs(u,x);
- }
- for(int j=;j<n;j++)
- {
- if(!j)f[x][j][]=K;
- else f[x][j][]=d[j];
- for(int i=hd[x],u;i;i=nxt[i])
- {
- if((u=to[i])==fa)continue;
- // for(int k=0;k<n;k++)ret=min(ret,f[u][k][1]);
- int ret=min(mn[u],f[u][j+][]);
- f[x][j][]+=ret;
- }
- if(!j)
- {
- f[x][j][]=K;
- for(int i=hd[x],u;i;i=nxt[i])
- {
- if((u=to[i])==fa)continue;
- int ret=min(f[u][][],mn[u]);
- // for(int k=0;k<n;k++)ret=min(ret,f[u][k][1]);
- f[x][j][]+=ret;
- }
- }
- else
- {
- f[x][j][]=inf;
- for(int i=hd[x],v;i;i=nxt[i])
- {
- if((v=to[i])==fa)continue;
- int r=f[v][j-][]+d[j];
- for(int l=hd[x],u;l;l=nxt[l])
- {
- if((u=to[l])==fa||u==v)continue;
- int ret=min(f[u][j+][],mn[u]);
- // for(int k=0;k<n;k++)ret=min(ret,f[u][k][1]);
- r+=ret;
- }
- f[x][j][]=min(f[x][j][],r);
- }
- }
- mn[x]=min(mn[x],f[x][j][]);
- }
- }
- int main()
- {
- n=rd(); K=rd();
- for(int i=;i<n;i++)d[i]=rd();
- for(int i=,x,y;i<n;i++)
- {
- x=rd(); y=rd();
- add(x,y); add(y,x);
- }
- memset(f,0x3f,sizeof f);
- memset(mn,0x3f,sizeof mn);
- dfs(,); ans=f[][][];
- for(int j=;j<n;j++)ans=min(ans,f[][j][]);
- printf("%d\n",ans);
- return ;
- }
bzoj 4711 小奇挖矿 —— 树形DP的更多相关文章
- 【BZOJ4711】小奇挖矿 树形DP
[BZOJ4711]小奇挖矿 Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓库并把矿石运到各个仓库里. [问 ...
- bzoj 4711 小奇挖矿 ——“承诺”类树形dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711 对“承诺”有了更深的了解. 向外和向内要区分,所以 f [ i ][ j ] 表示根向 ...
- [BZOJ 4033] [HAOI2015] T1 【树形DP】
题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)
题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...
- BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )
一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...
- BZOJ 4557 JLOI2016 侦查守卫 树形dp
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 题意概述: 给出一棵树,每个点付出代价w[i]可以控制距离和它不超过d的点,现在给 ...
- 【NOIP模拟赛】小奇挖矿 2
[题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小奇最初在0 ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
随机推荐
- POJ 2478 欧拉函数打表的运用
http://poj.org/problem?id=2478 此题只是用简单的欧拉函数求每一个数的互质数的值会超时,因为要求很多数据的欧拉函数值,所以选用欧拉函数打表法. PS:因为最后得到的结果会很 ...
- msp430入门编程46
msp430中C语言的人机交互--基于状态机菜单
- msp430入门编程45
msp430中C语言的人机交互--独占CPU菜单
- POJ 2749 2SAT判定+二分
题意:图上n个点,使每个点都与俩个中转点的其中一个相连(二选一,典型2-sat),并使任意两点最大 距离最小(最大最小,2分答案),有些点相互hata,不能选同一个中转点,有些点相互LOVE,必需选相 ...
- 怎么删除"自豪地采用WordPress"
wordpress刚刚安装完毕,打开默认的主页,会发现底部有这样的一行文字:“自豪地采用WordPress”.当然了,我们做一个网站,不一定需要这些文字,我们可以删除或者修改这些文字.今天,小编就来教 ...
- Treasure Hunt--poj1066(最短路加判断线段的关系)
http://poj.org/problem?id=1066 题目大意:有n条线段 他们都在这个房间里 最后有一个点代表起始位置 现在想通过墙出去 他只能爆破每个房间的中点的门 问最少的门通 ...
- [Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 673 Solved: 261[Submit][ ...
- @Aspect注解无效
Pointcut的execution配置正确的话,检查下,是否加了以下jar包 <!-- http://mvnrepository.com/artifact/org.aspectj/aspect ...
- 海康设备网络SDK 编程
http://www.cnblogs.com/qtblog/p/5366276.html http://www.hikvision.com/Cn/download_more_401.html
- Java静态分派与动态分派(二)
方法调用并不等于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程. 在程序运行时,进行方法调用是最普遍.最频繁的操作,但是Class文件 ...