"P1303" Apples two forks tree
Last Update:2016-09-05
Source: Internet
Author: User
<span id="Label3"></p><p><p>Tree to get started question</p></p><p><p>Original question:</p></p><p><p>There is an Apple tree, if the branch has a fork, it must be divided into 2 forks (that is, There is no only 1 sons of the knot). The tree has a total of N nodes (leaf Point or branch fork point), numbered 1-n, The root number must be 1.<br>We describe the position of a branch with the number of nodes connected at each end of a Branch. Here is a tree with 4 branches:<br>2 5<br>\ /<br>3 4<br>\ /<br>1<br>Now there are too many branches to PRUNE. But some branches have apples on them.<br>Given the number of branches that need to be retained, find out how many apples you can Keep.</p></p><p><p>1<=q<= n,1<n<=100</p></p><p><p>There are no more than 30,000 apples on each Branch.</p></p><p><p></p></p><p><p>The core idea is to use f[x][y] to indicate that a subtree with the root of x retains the maximum value of the Y-bar root</p></p><p><p>Each enumeration I,f[x][y]=max (f[x][y],f[lchild][i]+f[rchild][y-i-1]), if f[lchild][i]==0 or f[rchild][y-i-1]==0, go in recursively, find out F[lchild ][i] or f[rchild][y-i-1] re-update</p></p><p><p>When size==1 or y==0, be special.</p></p><p><p>At the beginning of the writing is written first respectively Lchild and rchild from 0-size[lchild] or size[rchild] the optimal value, in the enumeration I update x from 0-size[x] the optimal value, but so Good think wrong, see the Oy Seniors program to change over</p></p><p><p>I don't know how to write like This. ↑ can write right, still need to do more summary of the topic</p></p><p><p>Code:</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>#include <iostream><span style="color: #008080;"><span style="color: #008080;">2</span></span>#include <cstdio><span style="color: #008080;"><span style="color: #008080;">3</span></span>#include <algorithm><span style="color: #008080;"><span style="color: #008080;">4</span></span>#include <cstring><span style="color: #008080;"><span style="color: #008080;">5</span></span>#include <cmath><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">using</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span><span style="color: #000000;"><span style="color: #000000;">std;</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Read () {<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>z=<span style="color: #800080;"><span style="color: #800080;">0</span></span>, mark=<span style="color: #800080;"><span style="color: #800080;">1</span></span>;<span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>Ch=<span style="color: #000000;"><span style="color: #000000;">GetChar ();</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(ch<<span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">0</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>|| Ch><span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">9</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>){<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(ch==<span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">-</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>) mark=-<span style="color: #800080;"><span style="color: #800080;">1</span></span>; Ch=<span style="color: #000000;"><span style="color: #000000;">GetChar ();}</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(ch>=<span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">0</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>&&ch<=<span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">9</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>) {z= (z<<<span style="color: #800080;"><span style="color: #800080;">3</span></span>) + (z<<<span style="color: #800080;"><span style="color: #800080;">1</span></span>) +ch-<span style="color: #800000;"><span style="color: #800000;">'</span></span><span style="color: #800000;"><span style="color: #800000;">0</span></span><span style="color: #800000;"><span style="color: #800000;">'</span></span>; Ch=<span style="color: #000000;"><span style="color: #000000;">GetChar ();}</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span>z*<span style="color: #000000;"><span style="color: #000000;">mark;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>ddd{<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>next,y,value;} e[<span style="color: #800080;"><span style="color: #800080;"></span> about</span>];<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>link[<span style="color: #800080;"><span style="color: #800080;"></span> the</span>],ltop=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Inline<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Insert<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>X<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Y<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Z) {e[++ltop].next=link[x]; Link[x]=ltop;e[ltop].y=y;e[ltop].value=<span style="color: #000000;"><span style="color: #000000;">z;}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>dcd{<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>lchild,rchild,value,size;} tree[<span style="color: #800080;"><span style="color: #800080;"></span> about</span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">n,m;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">BOOL</span></span>visited[<span style="color: #800080;"><span style="color: #800080;"></span> the</span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>f[<span style="color: #800080;"><span style="color: #800080;"></span> the</span>][<span style="color: #800080;"><span style="color: #800080;"></span> the</span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Get_tree (<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>X<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">Y) {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>visited[x]=<span style="color: #0000ff;"><span style="color: #0000ff;">true</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Tree[x].value=<span style="color: #000000;"><span style="color: #000000;">y;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=link[x];i;i=e[i].next)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!<span style="color: #000000;"><span style="color: #000000;">visited[e[i].y]) {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!tree[x].lchild) tree[x].lchild=<span style="color: #000000;"><span style="color: #000000;">e[i].y;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> at</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span>Tree[x].rchild=<span style="color: #000000;"><span style="color: #000000;">e[i].y;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">Get_tree (e[i].y,e[i].value);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Tree[x].size=tree[tree[x].lchild].size+tree[tree[x].rchild].size+<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>TREE_DP (<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>X<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">Y) {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(y==<span style="color: #800080;"><span style="color: #800080;">0</span></span>) f[x][y]=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(!tree[x].lchild &&!tree[x].rchild) f[x][y]=<span style="color: #000000;"><span style="color: #000000;">tree[x].value;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> to</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">0</span></span>; i<y;i++<span style="color: #000000;"><span style="color: #000000;">){</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(f[tree[x].lchild][i]==<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">) TREE_DP (tree[x].lchild,i);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(f[tree[x].rchild][y-i-<span style="color: #800080;"><span style="color: #800080;">1</span></span>]==<span style="color: #800080;"><span style="color: #800080;">0</span></span>) TREE_DP (tree[x].rchild,y-i-<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> *</span>F[x][y]=max (f[x][y],f[tree[x].lchild][i]+f[tree[x].rchild][y-i-<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">]);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;">Panax Notoginseng</span></span>f[x][y]+=<span style="color: #000000;"><span style="color: #000000;">tree[x].value;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Main () {<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">freopen ("ddd.in", "r", stdin);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>Memset (visited,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(visited));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>Memset (tree,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(tree));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>Memset (f,<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(f));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Cin>>n>><span style="color: #000000;"><span style="color: #000000;">m;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">_left,_right,_value;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>I=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<n;i++<span style="color: #000000;"><span style="color: #000000;">){</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>_left=read (); _right=read (); _value=<span style="color: #000000;"><span style="color: #000000;">Read ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">Insert (_left,_right,_value); Insert (_right,_left,_value);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Get_tree (<span style="color: #800080;"><span style="color: #800080;">1</span></span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;">Wuyi</span></span>TREE_DP (<span style="color: #800080;"><span style="color: #800080;">1</span></span>, m+<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>cout<<f[<span style="color: #800080;"><span style="color: #800080;">1</span></span>][m+<span style="color: #800080;"><span style="color: #800080;">1</span></span>]<<<span style="color: #000000;"><span style="color: #000000;">endl;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> wu</span>}</pre><span class="cnblogs_code_collapse"><span class="cnblogs_code_collapse">View Code</span></span><p><p></p></p><p><p>"P1303" Apples two forks tree</p></p></span>