题意

给定一颗树,求这个树的最大子树,且这个子树是一个good-tree。

good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交。

题解

通过分析可以发现,这个子树是这个树的一条链,然后允许这条链上的点带上直接连接的点。

然后就转化为树上求最长链的DP问题。

  1. // #pragma GCC optimize(2)
  2. // #pragma GCC optimize(3)
  3. // #pragma GCC optimize(4)
  4. #include <bits/stdc++.h>
  5. //#include <unordered_set>
  6. //#include <unordered_map>
  7. // #include<bits/extc++.h>
  8. // using namespace __gnu_pbds;
  9. using namespace std;
  10. #define pb push_back
  11. #define fi first
  12. #define se second
  13. #define debug(x) cerr<<#x << " := " << x << endl;
  14. #define bug cerr<<"-----------------------"<<endl;
  15. #define FOR(a, b, c) for(int a = b; a <= c; ++ a)
  16.  
  17. typedef long long ll;
  18. typedef long double ld;
  19. typedef pair<int, int> pii;
  20. typedef pair<ll, ll> pll;
  21.  
  22. const int inf = 0x3f3f3f3f;
  23. const ll inff = 0x3f3f3f3f3f3f3f3f;
  24. const int mod = 1e9+;
  25.  
  26. template<typename T>
  27. inline T read(T&x){
  28. x=;int f=;char ch=getchar();
  29. while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
  30. while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
  31. return x=f?-x:x;
  32. }
  33.  
  34. /**********showtime************/
  35. const int maxn = 3e5+;
  36. vector<int>mp[maxn];
  37. int dp[maxn];
  38. int ans = ;
  39.  
  40. void dfs(int u, int fa) {
  41. int sz = mp[u].size();
  42. dp[u] = sz;
  43. for(int v : mp[u]) {
  44. if(v == fa) continue;
  45. dfs(v, u);
  46. ans = max(ans, dp[u] + dp[v]);
  47. dp[u] = max(dp[u], dp[v] + sz - );
  48. }
  49. }
  50. int main(){
  51. int T; scanf("%d", &T);
  52. while(T--) {
  53. int n; scanf("%d", &n);
  54. for(int i=; i<=n; i++) mp[i].clear();
  55. for(int i=; i<n; i++) {
  56. int u, v;
  57. scanf("%d%d", &u, &v);
  58. mp[u].pb(v);
  59. mp[v].pb(u);
  60. }
  61. ans = ;
  62. dfs(, );
  63. printf("%d\n", ans);
  64. }
  65. return ;
  66. }

[CF 1238F] The Maximum Subtree 树DP的更多相关文章

  1. Codeforces 1238F. The Maximum Subtree

    传送门 考虑构造一些区间使得树尽可能的 "大" 发现这棵树最多就是一条链加上链上出去的其他边连接的点 构造的区间大概长这样(图比较丑请谅解..$qwq$,图中每一个 "└ ...

  2. CF456D A Lot of Games (字典树+DP)

    D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...

  3. HDU4916 Count on the path(树dp??)

    这道题的题意其实有点略晦涩,定义f(a,b)为 minimum of vertices not on the path between vertices a and b. 其实它加一个minimum ...

  4. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  5. Codeforces 219D. Choosing Capital for Treeland (树dp)

    题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...

  6. HDU4276 The Ghost Blows Light SPFA&&树dp

    题目的介绍以及思路完全参考了下面的博客:http://blog.csdn.net/acm_cxlove/article/details/7964739 做这道题主要是为了加强自己对SPFA的代码的训练 ...

  7. Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)

    [题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...

  8. bzoj 3572世界树 虚树+dp

    题目大意: 给一棵树,每次给出一些关键点,对于树上每个点,被离它最近的关键点(距离相同被标号最小的)控制 求每个关键点控制多少个点 分析: 虚树+dp dp过程如下: 第一次dp,递归求出每个点子树中 ...

  9. bzoj 2286 [Sdoi2011]消耗战 虚树+dp

    题目大意:多次给出关键点,求切断边使所有关键点与1断开的最小费用 分析:每次造出虚树,dp[i]表示将i和i子树与父亲断开费用 对于父亲x,儿子y ①y为关键点:\(dp[x]\)+=\(dismn( ...

随机推荐

  1. MATLAB实现OTSU

    目录 1.OTSU算法原理简述: 2.MATLAB实现代码 @ 1.OTSU算法原理简述: 最大类间方差是由日本学者大津(Nobuyuki Otsu)于1979年提出,是一种自适应的阈值确定方法.算法 ...

  2. PJzhang:今天才搞清身份证、银行卡……的编码规则

    猫宁!!! ​​   之前思考过常见证件的编码规则,抽空查了一下,发现挺有意思.   一般查询证件或者手机号归属地都是直接百度小工具,但是背后的查询机制如何,可能大多人不甚了解.   介绍几种生活中最 ...

  3. 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)

    例如有一幅图,文件名为"a.jpg'.  读取: from PIL import Image #或直接import Image im = Image.open('a.jpg') 将图片转换成 ...

  4. 旗舰版win7系统中GraphEdit执行Loading a Graph From an External Process失败对策

    操作系统:旗舰版win7 DirectShow SDK: 9.0 IDE环境:VS2008 以下代码参考MSDN: HRESULT AddToRot(IUnknown *pUnkGraph, DWOR ...

  5. (已解决)Could not open '/var/lib/nova/mnt/*/volume-*': Permission denied

    [问题描述] 创建boot_from_volume的虚机时,磁盘后端为NFS,创建失败. [错误日志] nova-compute模块 Could not open '/var/lib/nova/mnt ...

  6. [ZJOI2007]捉迷藏(动态点分治/(括号序列)(线段树))

    题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...

  7. Django2.2 连接mySQL数据库

    一.Django2.2连接数据库(踩雷) 首先,Django2.2自带的是sqlite3数据库,但我们学的是mysql,因此学着连接(在mysql环境搭建成功的情况下)---参考博客: https:/ ...

  8. [转帖]ASML发布Q1季度财报 营收22.3亿欧元,EUV光刻机下半年产能大增 ...

    ASML发布Q1季度财报营收22.3亿欧元,EUV光刻机下半年产能大增 ... 孟宪瑞发布于2019-4-18 10:32 https://www.expreview.com/67969.html 一 ...

  9. sql server查询数据库连接数

    设置最大连接数 下面的T-SQL 语句可以配置SQL Server 允许的并发用户连接的最大数目. exec sp_configure 'show advanced options', 1exec s ...

  10. vue第一篇(搭建vue开发环境)

    1.下载node并安装 下载地址: https://nodejs.org/zh-cn/ 下载后双击文件安装 2.检查是否安装成功 node -v v10.16.0 npm -v 6.9.0 如果能正常 ...