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


树上依赖型背包,转化成dfs序上的问题就随便做了

 1 %:pragma GCC optimize(2)
 2 %:pragma GCC optimize(3)
 3 %:pragma GCC optimize("Ofast")
 4 %:pragma GCC optimize("inline")
 5 %:pragma GCC optimize("-fgcse")
 6 %:pragma GCC optimize("-fgcse-lm")
 7 %:pragma GCC optimize("-fipa-sra")
 8 %:pragma GCC optimize("-ftree-pre")
 9 %:pragma GCC optimize("-ftree-vrp")
10 %:pragma GCC optimize("-fpeephole2")
11 %:pragma GCC optimize("-ffast-math")
12 %:pragma GCC optimize("-fsched-spec")
13 %:pragma GCC optimize("unroll-loops")
14 %:pragma GCC optimize("-falign-jumps")
15 %:pragma GCC optimize("-falign-loops")
16 %:pragma GCC optimize("-falign-labels")
17 %:pragma GCC optimize("-fdevirtualize")
18 %:pragma GCC optimize("-fcaller-saves")
19 %:pragma GCC optimize("-fcrossjumping")
20 %:pragma GCC optimize("-fthread-jumps")
21 %:pragma GCC optimize("-funroll-loops")
22 %:pragma GCC optimize("-fwhole-program")
23 %:pragma GCC optimize("-freorder-blocks")
24 %:pragma GCC optimize("-fschedule-insns")
25 %:pragma GCC optimize("inline-functions")
26 %:pragma GCC optimize("-ftree-tail-merge")
27 %:pragma GCC optimize("-fschedule-insns2")
28 %:pragma GCC optimize("-fstrict-aliasing")
29 %:pragma GCC optimize("-fstrict-overflow")
30 %:pragma GCC optimize("-falign-functions")
31 %:pragma GCC optimize("-fcse-skip-blocks")
32 %:pragma GCC optimize("-fcse-follow-jumps")
33 %:pragma GCC optimize("-fsched-interblock")
34 %:pragma GCC optimize("-fpartial-inlining")
35 %:pragma GCC optimize("no-stack-protector")
36 %:pragma GCC optimize("-freorder-functions")
37 %:pragma GCC optimize("-findirect-inlining")
38 %:pragma GCC optimize("-fhoist-adjacent-loads")
39 %:pragma GCC optimize("-frerun-cse-after-loop")
40 %:pragma GCC optimize("inline-small-functions")
41 %:pragma GCC optimize("-finline-small-functions")
42 %:pragma GCC optimize("-ftree-switch-conversion")
43 %:pragma GCC optimize("-foptimize-sibling-calls")
44 %:pragma GCC optimize("-fexpensive-optimizations")
45 %:pragma GCC optimize("-funsafe-loop-optimizations")
46 %:pragma GCC optimize("inline-functions-called-once")
47 %:pragma GCC optimize("-fdelete-null-pointer-checks")
48 
49 #include <bits/stdc++.h>
50 using namespace std;
51 const int N = 5e3 + 10, P = 1e4 + 10;
52 
53 int n, p, f[N][P];
54 
55 int w[N], val[N], cnt, dfn[N], sz[N];
56 
57 int head[N], rest[N * 2], to[N * 2], tot;
58 
59 void add(int u, int v) {
60     to[++ tot] = v, rest[tot] = head[u], head[u] = tot;
61 }
62 
63 void dfs(int u) {
64     sz[u] = 1;
65     for(int i = head[u] ; i ; i = rest[i]) {
66         int v = to[i];
67         dfs(v);
68         sz[u] += sz[v];
69     }
70     dfn[++ cnt] = u;
71 }
72 
73 int main() {
74     freopen("medicine.in", "r", stdin);
75     freopen("medicine.out", "w", stdout);
76     scanf("%d%d", &n, &p);
77     for(int i = 1 ; i <= n ; ++ i) {
78         int f;
79         scanf("%d%d%d", &w[i], &f, &val[i]);
80         if(i != 1) add(f, i);
81     }
82     dfs(1);
83     for(int i = 1 ; i <= n ; ++ i) {
84         int u = dfn[i];
85         for(int j = 0 ; j <= p ; ++ j) {
86             int x = 0, y = 0;
87             x = f[i - sz[u]][j];
88             if(j - w[u] >= 0) y = f[i - 1][j - w[u]] + val[u];
89             f[i][j] = max(x, y);
90         }
91     }
92     printf("%d\n", f[n][p]);
93 }
JZOJ 5661. 【GDOI2018Day1模拟4.17】药香沁鼻
posted @ 2018-08-19 22:33  KingSann  阅读(187)  评论(0编辑  收藏  举报