BZOJ4543 POI2014 Hotel加强版


Description

同OJ3522
数据范围:n<=100000

Sample Input

7
1 2
5 7
2 5
2 3
5 6
4 5

Sample Output

5



#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define N 100010
LL pool[N<<4];
LL* top=pool;
LL* get(int len){LL* t=top;top+=len;return t;}
LL *f[N],*g[N];
int n;
LL ans=0;
vector<int> p[N];
int dep[N],lson[N];
void dfs1(int u,int fa){dep[u]=0;lson[u]=0;for(int i=0;i<p[u].size();i++){int v=p[u][i];if(v==fa)continue;dfs1(v,u);dep[u]=max(dep[u],dep[v]+1);if(dep[v]>dep[lson[u]])lson[u]=v;}
}
void dfs2(int u,int fa,int& maxlen,int blank){maxlen=max(maxlen,dep[u]);if(lson[u]){dfs2(lson[u],u,maxlen,blank+1);ans+=g[lson[u]][1];f[u]=f[lson[u]]-1;f[u][0]=1;g[u]=g[lson[u]]+1;}else{f[u]=get(maxlen+5+blank)+blank;g[u]=get(maxlen+5+blank);f[u][0]=1;}for(int i=0;i<p[u].size();i++){int v=p[u][i],mxlen=0;if(v==fa||v==lson[u])continue;dfs2(v,u,mxlen,0);for(int j=0;j<dep[v];j++)ans+=f[u][j]*g[v][j+1];for(int j=1;j<=dep[v]+1;j++)ans+=g[u][j]*f[v][j-1];for(int j=1;j<=dep[v]+1;j++)g[u][j]+=f[u][j]*f[v][j-1];for(int j=0;j<=dep[v];j++)f[u][j+1]+=f[v][j];for(int j=1;j<=dep[v];j++)g[u][j-1]+=g[v][j];}
}
int main(){scanf("%d",&n);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);p[u].push_back(v);p[v].push_back(u);}int mxlen=0;dfs1(1,0);dfs2(1,0,mxlen,0);printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/dream-maker-yk/p/9676294.html

BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*相关推荐

  1. 【BZOJ】4543: [POI2014]Hotel加强版-长链剖分DP

    传送门:bzoj4543 题解 三点两两距离相等的情况如下图: 设 f [ i ] [ j ] f[i][j] f[i][j]表示 i i i子树中与 i i i距离为 j j j(相对深度为 j j ...

  2. bzoj4543. [POI2014]Hotel加强版

    bzoj4543. [POI2014]Hotel加强版 题面描述 Solution 先看n≤5e3n \leq 5e3n≤5e3怎么做. 考虑树形dpdpdp. 设f[i][j]f[i][j]f[i] ...

  3. 【BZOJ4543】Hotel加强版【神仙树形dp】【长链剖分】

    题意:给一棵 nnn 个点的树,求两两距离相等的三元组个数. n≤105n\leq 10^5n≤105 显然相当于是找一个点到这三个点距离相等.子树内和子树外到当前点的距离为某个值的点的个数可以长链剖 ...

  4. P5904-[POI2014]HOT-Hotels加强版【长链剖分,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P5904 题目大意 nnn个点的一棵树,求有多少个点对(i,j,k)(i,j,k)(i,j,k)使得这三个点距离相等 ...

  5. 【CF1009F】 Dominant Indices (长链剖分+DP)

    题目链接 \(O(n^2)\)的\(DP\)很容易想,\(f[u][i]\)表示在\(u\)的子树中距离\(u\)为\(i\)的点的个数,则\(f[u][i]=\sum f[v][i-1]\) 长链剖 ...

  6. P7581-「RdOI R2」路径权值【长链剖分,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P7581 题目大意 给出nnn个点的有边权有根树,mmm次询问一个节点xxx的所有kkk级儿子两两之间路径长度. 1 ...

  7. BZOJ4543/BZOJ3522 [POI2014]Hotel加强版(长链剖分)

    题目好神仙--这个叫长链剖分的玩意儿更神仙-- 考虑dp,设\(f[i][j]\)表示以\(i\)为根的子树中到\(i\)的距离为\(j\)的点的个数,\(g[i][j]\)表示\(i\)的子树中有\ ...

  8. 【BZOJ4543】【POI2014】Hotel加强版(长链剖分)

    传送门 题意:求树上满足三点之间距离两两相等的三元组个数 n≤1e5n\le 1e5n≤1e5 原题数据是n≤5000n\le5000n≤5000 考虑怎么做 f[u][i]f[u][i]f[u][i ...

  9. P3565 [POI2014]HOT-Hotels(树形dp+长链剖分)

    P3565 [POI2014]HOT-Hotels 参考题解 题目大意: 给定一棵树,在树上选 3 个点,要求两两距离相等,求方案数. 三个点树上两两距离为d存在下面两种情况 某个点三个子树(保证该点 ...

最新文章

  1. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...
  2. Android小项目之---选择对话框(附源码)
  3. golang中的base64
  4. 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)
  5. Use Cases in an Agile Backlog
  6. 年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
  7. 360浏览器打不开微信的连接服务器,上午还能打开,下午360浏览器打不开微信公 – 手机爱问...
  8. Confirm的用法!
  9. Linux 使用sigaction查询或设置信号处理方式
  10. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
  11. 数据科学家常见的5个SQL面试问题
  12. Mybatis判断int类型是否为空
  13. 绿联扩展坞拆解_拆解报告:UGREEN绿联3A1C四口多功能扩展坞(带SD卡槽版)
  14. HDU 1081 To The Max
  15. 喜马拉雅下载文件名批量修改
  16. 分享几款PR常用插件
  17. java自动化测试面试题_自动化测试面试题
  18. 08CMS之数据库操作
  19. java操作mysql视图_MySQL使用视图
  20. Magicodes.IE在.NET Core中通过请求头导出多种格式文件

热门文章

  1. SQL Server 的通用分页显示存储过程
  2. 程序员写了段代码,自称完美! 网友: 我现在还在改你的Bug
  3. 虽然有索引,但没有用上
  4. 使用dom4j解析XML文件
  5. Python数据结构——栈、队列的实现(一)
  6. 字典树(Trie tree)
  7. SQL SERVER 2008 数据恢复错误的解决步骤
  8. Charles调试Https iOS
  9. Android---AlertDialog
  10. Android AsyncTask用法介绍