【GDOI2018Day1模拟4.17】药香沁鼻

8人阅读 评论(0) 收藏 举报
分类:

题目

这里写图片描述

分析

首先求出这棵树的dfs序,设lx表示以x为根的子树中的dfs序最小值(即点x的dfs序),设rx表示以x为根的子树中的dfs序最大值。
然后按照dfs序枚举点,每个点维护一个背包,对于点x,如果选这个点,就
把它加到lx+1的背包里,如果不选这个点,就把点x的背包与rx+1的背包合并
(这个合并是直接合并,即Ci= max(Ai,Bi))。
这样,不管这个点选或不选,都是o(m)的时间复杂度,所以总的复杂度是o(nm).

code

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector> 
#include<ctime>

using namespace std;  

const int N=3003;
const int inf=0X7fffffff; 
const int mod=1e9+7;
typedef long long LL;

struct arr{
    int x,y;
    int next;
}edge[N*4];
int edge_m;
int ls[N];
int a[N],b[N];
int f[N][2004];
int n,p;

int num[N];
int l[N],r[N];
int cnt=0;

int dfs(int x,int R)
{
    num[++cnt]=x;
    l[x]=cnt; r[x]=cnt;
    for (int i=ls[x];i;i=edge[i].next)
    {
        if (edge[i].y==R) continue;
        dfs(edge[i].y,x);
        r[x]=max(r[x],r[edge[i].y]);
    }
}

int add(int x,int y)
{
    edge[++edge_m]=(arr){x,y,ls[x]},ls[x]=edge_m;
    edge[++edge_m]=(arr){y,x,ls[y]},ls[y]=edge_m;
}

int main()
{
    //freopen("medicine.in","r",stdin);
    //freopen("medicine.out","w",stdout);
    memset(f,0,sizeof(f));
    scanf("%d%d",&n,&p);
    for (int i=1;i<=n;i++)
    {
        int fa;
        scanf("%d%d%d",&a[i],&fa,&b[i]);
        if (fa==i) continue;
        add(fa,i);
    }
    dfs(1,0);
    for (int i=cnt;i>0;i--)
    {
        int k=num[i];
        for (int j=p;j>=0;j--)
            f[i][j]=max(f[r[k]+1][j],0);
        for (int j=p;j>=a[k];j--)
            f[i][j]=max(f[i][j],f[i+1][j-a[k]]+b[k]);
    }
    int ans=0;
    for (int j=p;j>=0;j--)
        ans=max(ans,f[1][j]);
    printf("%d",ans);
}
查看评论

jzoj 5661. 【GDOI2018Day1模拟4.17】药香沁鼻

题目大意: 思路: 因为选y一定要先选x,所以这是一题0.1分数规划的树形依赖背包。(比较懒) 先用dfs把树转化成序列,如果cnt&amp;gt;W[I]那么就是可以装下的那么当先点的...
  • qq872425710
  • qq872425710
  • 2018-04-17 20:43:37
  • 15

jzoj5661 [GDOI2018Day1模拟4.17]药香沁鼻

Description 给定一棵树,每个节点有价值和体积。已知选择一个节点需要满足它的父亲节点也被选择,根据给出的背包容量求能获得的最大价值 Solution 题目是图片懒得放惹 这种...
  • jpwang8
  • jpwang8
  • 2018-04-17 15:52:21
  • 7

jzoj 5661. 【GDOI2018Day1模拟4.17】药香沁鼻 dp

DescriptionInputOutputSample Input6 9 1 1 1 1 1 100 8 1 1 1 3 6 2 3 1000 4 1 4Sample Output105...
  • liangzihao1
  • liangzihao1
  • 2018-04-17 14:41:00
  • 16

jzoj5662 [GDOI2018Day1模拟4.17]尺树寸泓

Description 给定一棵splay,每个节点都有一个权值,节点x的价值为以x为根的子树中所有节点的权值和 分别有一下三种操作: 0 x:将x节点左旋 1 x:将x节点右旋 2 x...
  • jpwang8
  • jpwang8
  • 2018-04-17 21:03:49
  • 9

朝阳过敏性鼻炎如何调理 首选祖传鼻炎药

治疗鼻炎专家推荐使用中医鼻窍康祖传鼻炎药,纯中药配制而成,外用更安全,可以避免口服对身体的影响,还可以避免打针、吃药、手术,尽量避免手术带来的后遗症,因为人没有器官再生长能力,请谨慎!http://w...
  • qq_24543057
  • qq_24543057
  • 2014-12-16 19:56:50
  • 516

jzoj5663 [GDOI2018Day1模拟4.17]呼吸决定

Description 这次的题意出奇短 求∑i=1nμ(i)im∑i=1nμ(i)im\sum_{i=1}^{n}\mu(i)i^m 已知1≤n≤1091≤n≤1091\leq n\leq...
  • jpwang8
  • jpwang8
  • 2018-04-18 08:12:14
  • 8

jzoj 5662. 【GDOI2018Day1模拟4.17】尺树寸泓

题目大意: 思路: 平衡树很简单了,学过的大概多知道,推一推会发现,他的sum是和只有旋转点会变,mul所有的父亲都会变,在多次旋转后可能为一条链,那么时间复杂度就会爆炸。 这时我们可以...
  • qq872425710
  • qq872425710
  • 2018-04-17 21:00:12
  • 37

我的学生网页作品---药满香.rar

  • 2013年06月05日 11:18
  • 301KB
  • 下载

药动学模型的Matlab模拟

  • 2011年03月14日 15:51
  • 156KB
  • 下载

寻找我的沁香

踏着海浪,伴着海风,在纯净的蓝天下,轻舞人生……这是我说的理想生活,梦幻中无忧愁的生活,但现在不是!曾经以为海浪可以带走所有记忆中的忧愁,其实只是暂时的忘却。很希望心境如此清宁,却往往事与愿违,虽然没...
  • caoxiaofan
  • caoxiaofan
  • 2010-01-14 09:44:00
  • 452
    个人资料
    持之以恒
    等级:
    访问量: 6万+
    积分: 3755
    排名: 1万+