MZOJ 1134: 二叉苹果树

按书上大的,dfs还需加强

 1 #include <bits/stdc++.h>
 2 #define read read()
 3 using namespace std;
 4 
 5 int read
 6 {
 7     int x = 0; char ch = getchar();
 8     while(ch < 48 || ch > 57) ch = getchar();
 9     while(ch >= 48&& ch <= 57) { x = 10 * x + ch - 48; ch = getchar();}
10     return x;
11 }
12 
13 const int N = 101;
14 
15 int n,q;
16 int head[N],size;
17 bool vis[N];
18 int l[N],r[N],a[N],tot[N];
19 int f[N][N];
20 
21 struct edge{
22     int v,nxt,w;
23 }e[N<<1];
24 
25 void add(int u,int v,int w)
26 {
27     e[++size].v = v;
28     e[size].w = w;
29     e[size].nxt = head[u];
30     head[u] = size;
31 }
32 
33 void readdata()
34 {
35     n = read; q = read; q++;
36     int u,v,w;
37     for(int i = 1; i < n; i++)
38     {
39         u = read; v = read; w = read;
40         add(u,v,w);
41         add(v,u,w);
42     }
43 }
44 
45 void maketree(int u)
46 {
47     for(int i = head[u]; i ; i = e[i].nxt)
48     {
49         int v = e[i].v;
50         if(vis[v]) continue;
51         a[v] = e[i].w;
52         vis[v] = 1;
53         l[u] = v;
54         maketree(v);
55         break;
56     }
57     for(int i = head[u]; i ; i = e[i].nxt)
58     {
59         int v = e[i].v;
60         if(vis[v]) continue;
61         a[v] = e[i].w;
62         vis[v] = 1;
63         r[u] = v;
64         maketree(v);
65         break;
66     }
67 
68 }
69 
70 int dp(int i,int j)
71 {
72     if(!j) return 0;
73     if(!l[i] && !r[i] )return a[i]; 
74     if(f[i][j]) return f[i][j];
75         for(int k = 0; k < j; k++)
76             f[i][j] = max(f[i][j], dp(l[i],k) + dp(r[i],j - 1 - k) + a[i]);
77     return f[i][j];
78 }
79 
80 void work()
81 {
82     vis[1] = 1;
83     maketree(1);
84     /*for(int i = 1; i <= n; i++)
85     {
86         printf("%d %d \n",l[i],r[i]);
87     }*/
88     //for(int i = 1; i <= n; i++) printf("%d ",a[i]);
89     printf("%d",dp(1,q));
90 }
91 
92 int main()
93 {
94 //    freopen("apple tree.in","r",stdin);
95     readdata();
96     work();
97     return 0;
98 }

猜你喜欢

转载自www.cnblogs.com/mzg1805/p/10300252.html