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;
}

BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*的更多相关文章

  1. 【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP

    [BZOJ4543][POI2014]Hotel加强版 Description 同OJ3522数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 ...

  2. bzoj4543 [POI2014]Hotel加强版 长链剖分+树形DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4543 题解 这道题的弱化版 bzoj3522 [POI2014]Hotel 的做法有好几种吧. ...

  3. BZOJ4543[POI2014]Hotel加强版——长链剖分+树形DP

    题意参见BZOJ3522 n<=100000 数据范围增强了,显然之前的转移方程不行了,那么不妨换一种. 因为不能枚举根来换根DP,那么我们描述的DP方程每个点要计算三个点都在这个点的子树内的方 ...

  4. BZOJ.4543.[POI2014]Hotel加强版(长链剖分 树形DP)

    题目链接 弱化版:https://www.cnblogs.com/SovietPower/p/8663817.html. 令\(f[x][i]\)表示\(x\)的子树中深度为\(i\)的点的个数,\( ...

  5. BZOJ3522&4543 [POI2014]Hotel加强版 长链剖分

    上上周见fc爷用长链剖分秒题 于是偷偷学一学 3522的数据范围很小 可以暴力枚举每个点作为根节点来dp 复杂度$O(n^2)$ 考虑令$f[x][j]$表示以$x$为根的子树内距离$x$为$j$的点 ...

  6. 2019.01.08 bzoj4543: [POI2014]Hotel加强版(长链剖分+dp)

    传送门 代码: 长链剖分好题. 题意:给你一棵树,问树上选三个互不相同的节点,使得这个三个点两两之间距离相等的方案数. 思路: 先考虑dpdpdp. fi,jf_{i,j}fi,j​表示iii子树中离 ...

  7. BZOJ4543 [POI2014]Hotel加强版

    题意 有一个树形结构,每条边的长度相同,任意两个节点可以相互到达.选3个点.两两距离相等.有多少种方案? 数据范围:n<=100000 分析 参照小蒟蒻yyb的博客. 我们先考虑一个\(O(n^ ...

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

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

  9. bzoj 3522 / 4543 [POI 2014] Hotel - 动态规划 - 长链剖分

    题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离 ...

随机推荐

  1. geoserver源码学习与扩展——restAPI访问

    产生这篇文章的想法是在前端通过js调用restAPI时,总是不成功,发送ajax请求时还总是出现类似跨域的问题,后来查找才发现,默认情况下restAPI的访问都需要管理员权限,而通过ajax请求传输用 ...

  2. HttpServletResponse response详解

    //内容类型和编码格式可以被调用多次,最后一次将覆盖之前的设置 //内容类型和编码格式必须在 //设置内容类型getWriter和getOutputStream方法之前调用,否则不起作用 //若未设置 ...

  3. Codeforces Round #341 (Div. 2) C. Mike and Chocolate Thieves 二分

    C. Mike and Chocolate Thieves time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  4. [转载]查看JDK及Java框架的源代码

    1.点 "window"-> "Preferences" -> "Java" -> "Installed JRE ...

  5. C4 文件和目录:APUE 笔记

    C4: 文件和目录 本章主要讨论stat函数及其返回信息,通过修改stat结构字段,了解文件属性. struct stat结构定义如下: struct stat { __dev_t st_dev; / ...

  6. django自强学堂地址

    https://code.ziqiangxuetang.com/django/django-install.html

  7. JavaScript 打印Div内容

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Untitled Page& ...

  8. HUST 1010 The Minimum Length (字符串最小循环节)

    题意 有一个字符串A,一次次的重写A,会得到一个新的字符串AAAAAAAA.....,现在将这个字符串从中切去一部分得到一个字符串B.例如有一个字符串A="abcdefg".,复制 ...

  9. 对一致性Hash算法,Java代码实现的深入研究(转)

    转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...

  10. ubuntu安装amd/ati显卡驱动

    原网页: http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=390372 整合了几个帖子,大概如此:用以下命令卸载所有驱动: 代码: sudo ...