LiberOJ -6210-tree -树形DP
- https://loj.ac/problem/6210
- 题意 :按照定义的路径计算权值方式找一条最小的权值路径。
- 思路 :设定dp[ i ] [ 0 / 1 ] 以1为根的情况下,以 i 节点下子树走分别全1和走一次2和剩余全走1 的最长链
- 每遍历一次子树,统计一次答案,DP过程中 ans1,统计 路径全为1的最大值。
- ans2统计路径走 一段1中间一个2再走一段1的最长距离,三个最值更新方程,
- ans1 = max(ans1,dp[to][0] + dp[u][0]); DP[u][0]记录的是除了 to 这条路径 从u出发的最长路 。
- dp[to][0]则是记录的以to 为根全走1的最长路 , 这样 ans1最终记录的是 以每个点为根 所能造出的全部为1的最长路
- ans2 = max(ans2,dp[u][0] + dp[to][1]);
- ans2 = max(ans2,dp[u][1] + dp[to][0]);
- 同理 ans2在记录以每个点为根所能造成的(一段 1 一个 2 一段 1 )这样路径的最大值。
- 一定是 ans1,ans2先统计 维护最值,在进行跟新这个点为根的 两种 路径的最大值。
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define maxn 523456 int n,x[maxn],a,b,ans; int dp[maxn][2],ans1,ans2; vector<int>gra[maxn]; void dfs(int u,int p) {if(x[u]==1)dp[u][0]=1;else if(x[u]==2)dp[u][1]=1;for(int i=0; i<gra[u].size(); i++){int v=gra[u][i];if(v==p)continue;dfs(v,u);ans1=max(ans1,dp[u][0]+dp[v][0]);ans2=max(ans2,dp[u][0]+dp[v][1]);ans2=max(ans2,dp[u][1]+dp[v][0]);if(x[u]>2)continue;else if(x[u]==1){dp[u][0]=max(dp[u][0],dp[v][0]+1);dp[u][1]=max(dp[u][1],dp[v][1]+1);}elsedp[u][1]=max(dp[u][1],dp[v][0]+1);} } int main() {scanf("%d",&n);for(int i=1; i<n; i++){scanf("%d%d",&a,&b);gra[a].push_back(b);gra[b].push_back(a);}ans=inf;for(int i=1; i<=n; i++){scanf("%d",&x[i]);ans=min(ans,x[i]);}if(ans>1)printf("%d/1\n",ans);else{dfs(1,0);if(ans1*2>ans2)printf("1/%d\n",ans1);else if(ans2%2==0)printf("1/%d\n",ans2/2);else printf("2/%d\n",ans2);}return 0; }
LiberOJ -6210-tree -树形DP相关推荐
- LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP
题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...
- 2021牛客多校4 - Rebuild Tree(树形dp)
题目链接:点击查看 题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树 题目分析:原树删掉 kkk 条边后会 ...
- hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: ...
- HDU 5834 Magic boy Bi Luo with his excited tree 树形DP
Magic boy Bi Luo with his excited tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5834 Descript ...
- BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)
BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...
- Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp
链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...
- VK Cup 2012 Round 1 D. Distance in Tree (树形dp)
题目:http://codeforces.com/problemset/problem/161/D 题意:给你一棵树,问你两点之间的距离正好等于k的有多少个 思路:这个题目的内存限制首先大一倍,他有5 ...
- ARC101E Ribbons on Tree 树形dp 容斥
题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...
- A. Parsa‘s Humongous Tree(树形DP + 贪心)
Problem - 1528A - Codeforces 两个玩家正在玩一个游戏.他们有一个整数1,2,...,n的排列组合(排列组合是一个数组,其中从1到n的每个元素正好出现一次).这个排列组合没有 ...
- 根号均摊 ---- E. Xenia and Tree(树形dp + 暴力根号均摊)
题目大意 题目大意: 你有一颗树:树开始时候1号点是红色的 现在就是你有两次操作: 1 u 把u点涂成红色 2 u 询问离u点最近红点在哪里? 数据范围是n,m∈[1,1e5]n,m\in[1,1e5 ...
最新文章
- 将图片(路径)转换为Base64 和 将base64转换为file类型
- 编写spring应用
- SQL Server 的分散式資料複寫技術
- 机器学习实战读书笔记(1)
- 形而上者谓之道,形而下者谓之器
- 磊科路由虚拟服务器设置,磊科路由器虚拟转发服务设置的方法
- 机器学习笔记(五)续——朴素贝叶斯算法的后验概率最大化含义
- 人生重开模拟器微信小程序源码
- 4月27日--28日课堂内容
- nexus+7+android+5.0++wifi+代理,谷歌Nexus5吃上安卓8.0:除了WiFi全不能正常工作
- maven的package与install命令区别
- GD32创建工程与启动文件选择
- 周志华《机器学习》中的西瓜数据集
- 编写一个JSP页面,利用Scriptlet编写一段计算代码,要求用0做除数,并使用page指令将该错误信息显示在另一个JSP页面上,产生的错误信息为“错误,不能用0做除数.“
- 王道操作系统2.2处理机调度摘要
- 用计算机怎么计算字节,计算机硬盘容量大小怎么计算
- JS判断对象是否为空对象的几种方法
- windows环境下利用python进行CGI配置
- 用扫地机器人楼下吵吗_关于扫地机器人噪音的一些知识
- fastadmin列表页展示分类名称通用搜索按分类名称搜索