• 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相关推荐

  1. LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP

    题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...

  2. 2021牛客多校4 - Rebuild Tree(树形dp)

    题目链接:点击查看 题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树 题目分析:原树删掉 kkk 条边后会 ...

  3. 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: ...

  4. 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 ...

  5. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  6. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  7. VK Cup 2012 Round 1 D. Distance in Tree (树形dp)

    题目:http://codeforces.com/problemset/problem/161/D 题意:给你一棵树,问你两点之间的距离正好等于k的有多少个 思路:这个题目的内存限制首先大一倍,他有5 ...

  8. ARC101E Ribbons on Tree 树形dp 容斥

    题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n​个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...

  9. A. Parsa‘s Humongous Tree(树形DP + 贪心)

    Problem - 1528A - Codeforces 两个玩家正在玩一个游戏.他们有一个整数1,2,...,n的排列组合(排列组合是一个数组,其中从1到n的每个元素正好出现一次).这个排列组合没有 ...

  10. 根号均摊 ---- E. Xenia and Tree(树形dp + 暴力根号均摊)

    题目大意 题目大意: 你有一颗树:树开始时候1号点是红色的 现在就是你有两次操作: 1 u 把u点涂成红色 2 u 询问离u点最近红点在哪里? 数据范围是n,m∈[1,1e5]n,m\in[1,1e5 ...

最新文章

  1. 将图片(路径)转换为Base64 和 将base64转换为file类型
  2. 编写spring应用
  3. SQL Server 的分散式資料複寫技術
  4. 机器学习实战读书笔记(1)
  5. 形而上者谓之道,形而下者谓之器
  6. 磊科路由虚拟服务器设置,磊科路由器虚拟转发服务设置的方法
  7. 机器学习笔记(五)续——朴素贝叶斯算法的后验概率最大化含义
  8. 人生重开模拟器微信小程序源码
  9. 4月27日--28日课堂内容
  10. nexus+7+android+5.0++wifi+代理,谷歌Nexus5吃上安卓8.0:除了WiFi全不能正常工作
  11. maven的package与install命令区别
  12. GD32创建工程与启动文件选择
  13. 周志华《机器学习》中的西瓜数据集
  14. 编写一个JSP页面,利用Scriptlet编写一段计算代码,要求用0做除数,并使用page指令将该错误信息显示在另一个JSP页面上,产生的错误信息为“错误,不能用0做除数.“
  15. 王道操作系统2.2处理机调度摘要
  16. 用计算机怎么计算字节,计算机硬盘容量大小怎么计算
  17. JS判断对象是否为空对象的几种方法
  18. windows环境下利用python进行CGI配置
  19. 用扫地机器人楼下吵吗_关于扫地机器人噪音的一些知识
  20. fastadmin列表页展示分类名称通用搜索按分类名称搜索

热门文章

  1. 华为工业互联网白皮书
  2. QT-日期倒计时功能的小坑
  3. Hadoop国内镜像下载地址
  4. 【功能安全】【ISO26262】以汽车安全完整性等级为导向和以安全为导向的分析
  5. 苏州华旃航天电器有限公司项目
  6. 【OpenCV 例程300篇】209. HSV 颜色空间的彩色图像分割
  7. python爬人人贷代码视频_【IT专家】人人贷网的数据爬取(利用python包selenium)
  8. Xero 系列之库存管理篇
  9. i2c协议解读(附读写过程c代码)
  10. CSS透明效果的实现的三种方式