【树形dp 思维题】HHHOJ#483. NOIP司马懿
要注意利用一些题目的特殊条件吧。
题目大意
有一颗个点带点权的树,次询问树上是否存在长度为的路径。
题目分析
做的时候没有用好的条件,以为是道玄学的点分。
将权值按奇偶性分类,那么因为每个点只能是,所以对树上的每一条路径,每加入一个点,其子路径所能表示的路径都+1,奇偶性就改变了;每加入一个点,其子路径所能表示的路径都+2,奇偶性不变。
这样看来,按奇偶性分成的两类路径各自都是连续的。
那么变为一个子问题:求树上最长的路径。表示点包括自身向下的链中、奇偶性为的最长链长,这个问题用dp就很容易解决了。
1 #include<bits/stdc++.h> 2 const int maxn = 100035; 3 const int maxm = 200035; 4 5 int n,m,w[maxn],f[maxn][2],ans[2]; 6 int edgeTot,head[maxn],nxt[maxm],edges[maxm]; 7 8 int read() 9 { 10 char ch = getchar(); 11 int num = 0, fl = 1; 12 for (; !isdigit(ch); ch=getchar()) 13 if (ch=='-') fl = -1; 14 for (; isdigit(ch); ch=getchar()) 15 num = (num<<1)+(num<<3)+ch-48; 16 return num*fl; 17 } 18 void addedge(int u, int v) 19 { 20 edges[++edgeTot] = v, nxt[edgeTot] = head[u], head[u] = edgeTot; 21 edges[++edgeTot] = u, nxt[edgeTot] = head[v], head[v] = edgeTot; 22 } 23 void Max(int &x, int y){x = x>y?x:y;} 24 void dfs(int x, int fa) 25 { 26 f[x][w[x]&1] = w[x]; 27 for (int i=head[x]; i!=-1; i=nxt[i]) 28 { 29 int v = edges[i]; 30 if (v==fa) continue; 31 dfs(v, x); 32 Max(ans[0], f[x][0]+f[v][0]); 33 Max(ans[0], f[x][1]+f[v][1]); 34 Max(ans[1], f[x][1]+f[v][0]); 35 Max(ans[1], f[x][0]+f[v][1]); 36 Max(f[x][w[x]&1], f[v][0]+w[x]); 37 Max(f[x][1-(w[x]&1)], f[v][1]+w[x]); 38 } 39 Max(ans[0], f[x][0]), Max(ans[1], f[x][1]); 40 } 41 int main() 42 { 43 memset(head, -1, sizeof head); 44 n = read(), m = read(); 45 for (int i=1; i<=n; i++) w[i] = read(); 46 for (int i=1; i<n; i++) addedge(read(), read()); 47 dfs(1, 0); 48 for (int x; m; --m) 49 { 50 x = read(); 51 puts(ans[x&1]>=x?"YES":"NO"); 52 } 53 return 0; 54 }
END
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 赶AI大潮:在VSCode中使用DeepSeek及近百种模型的极简方法
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
2018-07-14 【树形dp】7.14城市