1722: [Usaco2006 Mar] Milk Team Select 产奶比赛
1722: [Usaco2006 Mar] Milk Team Select 产奶比赛
https://www.lydsy.com/JudgeOnline/problem.php?id=1722
分析:
f[u][i][0/1]表示子树u中,有i对相邻的点,最大和是多少。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
#include<set>
#include<vector>
#include<queue>
#include<map>
#define fi(s) freopen(s,"r",stdin);
#define fo(s) freopen(s,"w",stdout);
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
const int INF = 1e9; int f[N][N][], g[N][];
int head[N], nxt[N], to[N], siz[N], w[N], fa[N];
int n, x, En; void add_edge(int u,int v) {
++En; to[En] = v; nxt[En] = head[u]; head[u] = En;
} void dfs(int u) {
siz[u] = ;
f[u][][] = w[u];
f[u][][] = ;
for (int i=head[u]; i; i=nxt[i]) {
int v = to[i];
dfs(v);
siz[u] += siz[v];
for (int j=; j<=siz[u]-; ++j) // 相邻的
for (int k=,lim=min(j, siz[v]-); k<=lim; ++k) { // 子树中相邻的
g[j][] = max(g[j][], f[u][j - k][] + max(f[v][k][], f[v][k][]));//cerr << g[j][0] << "\n";
if (j - k >= ) g[j][] = max(g[j][], f[u][j - k][] + f[v][k][]); //cerr << g[j][1] << "\n";;
if (j - k - >= ) g[j][] = max(g[j][], f[u][j - k - ][] + f[v][k][]);// cerr << g[j][1] << "\n";; }
for (int j=n; j>=; --j)
f[u][j][] = g[j][], f[u][j][] = g[j][], g[j][] = g[j][] = -INF;
}
}
int main() {
n = read(), x = read();
memset(f, -0x3f, sizeof(f));
memset(g, -0x3f, sizeof(g)); // 把g[0]初始化了!!!
// for (int i=1; i<=n; ++i) g[i][0] = g[i][1] = -INF;
for (int i=; i<=n; ++i) {
w[i] = read(), fa[i] = read();
add_edge(fa[i], i);
}
dfs();
for (int i=n; i>=; --i) {
if (f[][i][] >= x) { cout << i; return ; }
}
cout << -;
return ;
}
1722: [Usaco2006 Mar] Milk Team Select 产奶比赛的更多相关文章
- bzoj1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 树形dp
题目链接 bzoj1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 题解 dp[i][j][0 / 1] 以i为根的子数中 相邻点对选了j个的最大价值 代码 #i ...
- BZOJ1722 [Usaco2006 Mar] Milk Team Select 产奶比赛
直接树形dp就好了恩 令$f[i][j][t]$表示以$i$为根的子树,选出来的点存在$j$对父子关系,$t$表示$i$这个点选或者没选,的最大产奶值 分类讨论自己和儿子分别有没有选,然后转移一下就好 ...
- 「BZOJ1722」「Usaco2006 Mar」Milk Team Select产奶比赛 解题报告
Milk Team Select 产奶比赛 Description Farmer John's N (\(1 \le N \le 500\)) cows are trying to select th ...
- [BZOJ1722]Milk Team Select 产奶比赛
Description Farmer John's N (1 <= N <= 500) cows are trying to select the milking team for the ...
- 【Usaco2006Mar】Milk Team Select产奶比赛
[思路分析] 比赛的时候想到了用我确实也想到了树形DP,但是状态没有确定对,连样例都没有过 PS:这是第二道发现还可以用状态作为答案最后输出的题目 正解:树形DP(背包) 按照读进来的数据,我们先建一 ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 [后缀数组]
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1017 Solved: ...
- bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
后缀数组+二分答案+离散化.(上次写的时候看数据小没离散化然后一直WA...写了lsj师兄的写法. #include<cstdio> #include<cstring> #in ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
二分答案m, 后缀数组求出height数组后分组来判断. ------------------------------------------------------------ #include&l ...
- BZOJ#1717:[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+单调队列)
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的 ...
随机推荐
- 组合数取模方法总结(Lucas定理介绍)
1.当n,m都很小的时候可以利用杨辉三角直接求. C(n,m)=C(n-1,m)+C(n-1,m-1): 2.n和m较大,但是p为素数的时候 Lucas定理是用来求 c(n,m) mod p,p为素数 ...
- 联想Thinkpad 遇到双系统 uefi Ubuntu无法进入的引导问题解决方案
最近因为许多课程设计的需要,安装了Ubuntu双系统,但是一开始遇到了安装好了以后无法进入的问题,后来弄好后手残又把引导项给删了又要弄回去,反反复复很多次,网上的很多经验都十分过时,要么对最新的uef ...
- 复习静态页面polo-360
1.ps快捷键 ctrl+1 恢复到100% ctrl+0 适应屏幕大小 ctrl+r 显示标尺 辅助线的利用 矩形框--图像--裁剪:文件存储为web所用格式,注意选格式. 1个像素的平铺 雪碧图的 ...
- valgrind massif内存分析[转]
valgrind检查内存泄露 #valgrind ./程序 内存泄漏问题,我们有memcheck工具来检查.很爽.但是有时候memcheck工具查了没泄漏,程序一跑,内存还是狂飙.这又是什么问题. ...
- Java对象声明时:new与null的区别
作者:林子云链接:https://www.zhihu.com/question/21468505/answer/18333632来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Struts2通配符
action: struts: or: 请求路径:
- PAT——1030. 完美数列
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. ...
- Luogu_4197 Peaks
P4197 Peaks 并不会克鲁斯卡尔重构树,于是就写了离线算法. 使用了最小生成树,启发式合并treap 在最小生成树,克鲁斯卡尔算法 时 ,将询问一块处理.便可以保证询问时边的要求.然后利用平衡 ...
- 优先队列之二叉堆与d-堆
二叉堆简介 平时所说的堆,若没加任何修饰,一般就是指二叉堆.同二叉树一样,堆也有两个性质,即结构性和堆序性.正如AVL树一样,对堆的以此操作可能破坏者两个性质中的一个,因此,堆的操作必须要到堆的所有性 ...
- Microsoft Visio / Project professional 2013 官方版本(下载)
Microsoft Visio微软开发的一款软件, 它有助于 IT 和商务专业人员轻松地可视化.分析和交流复杂信息. 它能够将难以理解的复杂文本和表格转换为一目了然的 Visio 图表. 该软件通过创 ...