【Codeforces Round #419 (Div. 1)】Codeforces 815C Karen and Supermarket
2017-06-26 22:00
387 查看
可以发现依赖关系是一个树形结构,我们可以树形dp,对每个点记录f[u][i]和g[u][i]表示u的子树取i个结点,子树中可以有优惠券、不能有优惠券的最小花费,不难转移。
可以证明,复杂度是O(n2)的。
可以证明,复杂度是O(n2)的。
#include<cstdio> #include<cstring> #include<vector> #include<algorithm> using namespace std; const int maxn=5010,oo=0x3f3f3f3f; vector<int> son[maxn]; int size[maxn],c[maxn],d[maxn],f[maxn][maxn],g[maxn][maxn],val[maxn],tf[maxn],tg[maxn],n,m,clo; void dfs(int u) { //printf("in:%d\n",u); int v; for (int i=2;i<=n;i++) f[u][i]=g[u][i]=oo; size[u]=1; f[u][1]=c[u]-d[u]; g[u][1]=c[u]; for (vector<int>::iterator it=son[u].begin();it!=son[u].end();++it) { v=*it; dfs(v); for (int i=0;i<=size[u];i++) { tf[i]=f[u][i]; tg[i]=g[u][i]; } for (int i=0;i<=size[u];i++) for (int j=1;j<=size[v];j++) { g[u][i+j]=min(g[u][i+j],g[v][j]+tg[i]); f[u][i+j]=min(f[u][i+j],i?f[v][j]+tf[i]:oo); } size[u]+=size[v]; } for (int i=1;i<=size[u];i++) f[u][i]=min(f[u][i],g[u][i]); //printf("out:%d %d\n",u,size[u]); } int main() { //freopen("c.in","r",stdin); int x; scanf("%d%d",&n,&m); scanf("%d%d",&c[1],&d[1]); for (int i=2;i<=n;i++) { scanf("%d%d%d",&c[i],&d[i],&x); son[x].push_back(i); } dfs(1); //printf("%d\n",clo); for (int i=n;;i--) if (f[1][i]<=m) { printf("%d\n",i); return 0; } }
相关文章推荐
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集
- Codeforces 272 div2
- [Codeforces] Round #436 (Div. 2)
- codeforces 292 div2 E【RE】
- codeforces 789 div2 题解
- 字符串q次操作将(l,r)内的字符升序或降序排列 计数排序 + 线段树优化 Codeforces div2 558E A Simple Task
- Codeforces 242(DIV 2) B题
- codeforces基础题——#357(div2) D
- codeforces基础题——#356(div2) C
- 【Codeforces2015ICL,Finals,Div. 1#J】Ceizenpok's formula(扩展Lucas定理+中国剩余定理)
- Codeforces Beta Round #27 (Codeforces format, Div. 2)
- codeforces --- Round #248 (Div. 2) B. Kuriyama Mirai's Stones
- codeforces 204(Div.1 A) Little Elephant and Interval(贪心)
- Codeforces #277.5 (Div. 2) B. BerSU Ball(DP:LCS)
- CodeForces 833B Round#426 Div1B&Div2D The Bakery: DP+线段树
- Codeforces Round #439 (Div. 2) Problem E (Codeforces 869E) - 暴力 - 随机化 - 二维树状数组 - 差分
- 【codeforces】AIM Tech Round 3 (Div. 2)
- codeforces 148 div2 B
- codeforces水题100道 第十一题 Codeforces Round #143 (Div. 2) A. Team (brute force)
- codeforces水题100道 第二十六题 Codeforces Beta Round #95 (Div. 2) A. cAPS lOCK (strings)