洛穀 P2015 二叉蘋果樹

來源:互聯網
上載者:User

標籤:tar   hold   cst   return   oid   ref   col   child   鏈表   

P2015 二叉蘋果樹題目描述

有一棵蘋果樹,如果樹枝有分叉,一定是分2叉(就是說沒有只有1個兒子的結點)

這棵樹共有N個結點(葉子點或者樹枝分叉點),編號為1-N,樹根編號一定是1。

我們用一根樹枝兩端串連的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹

2 5 \ / 3 4 \ / 1 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。

給定需要保留的樹枝數量,求出最多能留住多少蘋果。

輸入輸出格式輸入格式:

 

第1行2個數,N和Q(1<=Q<= N,1<N<=100)。

N表示樹的結點數,Q表示要保留的樹枝數量。接下來N-1行描述樹枝的資訊。

每行3個整數,前兩個是它串連的結點的編號。第3個數是這根樹枝上蘋果的數量。

每根樹枝上的蘋果不超過30000個。

 

輸出格式:

 

一個數,最多能留住的蘋果的數量。

 

輸入輸出範例輸入範例#1:
5 21 3 11 4 102 3 203 5 20
輸出範例#1:
21
思路:類似於上一個題目選課,一樣是樹形DP,(記憶化搜尋)。
錯因:雙向便鏈表儲存時,數組木有開兩倍,(╯‵□′)╯︵┻━┻。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,q,tot;int f[110][110];int to[210],net[210],head[210],cap[210];int dad[110],lchild[110],rchild[110],w[110];void add(int u,int v,int w){    to[++tot]=v;net[tot]=head[u];cap[tot]=w;head[u]=tot;    to[++tot]=u;net[tot]=head[v];cap[tot]=w;head[v]=tot;}void dfs(int now){    for(int i=head[now];i;i=net[i]){        if(dad[now]!=to[i]){            dad[to[i]]=now;            w[to[i]]=cap[i];            dfs(to[i]);        }    }}int dfs(int i,int j){    if(i<1||j<1||i>n||j>q+1)    return 0;    if(f[i][j])    return f[i][j];    for(int k=0;k<j;k++)        f[i][j]=max(f[i][j],dfs(lchild[i],k)+dfs(rchild[i],j-k-1)+w[i]);    f[i][j]=max(f[i][j],dfs(rchild[i],j));    return f[i][j];}int main(){    scanf("%d%d",&n,&q);    for(int i=1;i<n;i++){        int x,y,z;        scanf("%d%d%d",&x,&y,&z);        add(x,y,z);    }    add(1,0,0);    dfs(0);    for(int i=1;i<=n;i++){        int fa=dad[i];        if(!lchild[fa])    lchild[fa]=i;        else{            fa=lchild[fa];            while(rchild[fa])    fa=rchild[fa];            rchild[fa]=i;        }        }    cout<<dfs(lchild[0],q+1);}

洛穀 P2015 二叉蘋果樹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.