Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是长链剖分就可以优化成 \(O(n)\) 的了 不会写指针,所以写deque #include<bits/stdc++.h> #define ui unsigned int #define ll long long #define db double #define ld long double #…
题目链接 弱化版:https://www.cnblogs.com/SovietPower/p/8663817.html. 令\(f[x][i]\)表示\(x\)的子树中深度为\(i\)的点的个数,\(g[x][i]\)表示\(x\)子树中,满足\(u,v\)到\(LCA(u,v)\)的距离都是\(d\),且到\(x\)的距离为\(d-i\)的点对\((u,v)\)个数.(就是不以\(x\)作为三个点的中心位置,那样就没法算了) 如图 那么就可以由\(g[x][i]\)与另一棵子树的\(f[y][…
Description 给出一棵树求三元组 \((x,y,z)\,,x<y<z\) 满足三个点两两之间距离相等,求三元组的数量 Solution 考虑暴力 \(DP\) 设 \(f[i][j]\) 表示距离点 \(i\) 的子树内距离为 \(j\) 的点的数量 设 \(g[i][j]\) 表示 \(i\) 子树内的一个二元组 \((x,y)\) 满足 \(dis(x,lca)=dis(y,lca)=dis(i,lca)+j\) 的二元组的数量,可以视为等待与子树外合并的二元组的数量 显然有转移…
4543: [POI2014]Hotel加强版 链接 分析: f[u][i]表示子树u内,距离u为i的点的个数,g[u][i]表示在子树u内,已经选了两个深度一样的点,还需要在距离u为i的一个点作为第三个点. 然后就可以利用这两个数组统计答案了. ans+=g[u][j]*f[v][j-1]+f[u][j]*g[v][j+1]; 如果直接合并f和g,复杂度是$O(n^2)$的,如果可以启发式合并,复杂度是$O(nlogn)$的,如果是长链剖分,复杂度是$O(n)$的. 长链剖分就是按照子树内最长…
上上周见fc爷用长链剖分秒题 于是偷偷学一学 3522的数据范围很小 可以暴力枚举每个点作为根节点来dp 复杂度$O(n^2)$ 考虑令$f[x][j]$表示以$x$为根的子树内距离$x$为$j$的点的个数$g[x][j]$表示以$x$为根的子树内的点对$(a,b)$距他们的$lca$的距离为$d$,$x$距$lca$的距离为$d-j$的点对数 那么转移很明了 对于 $x,y$ 其中$fa[y]=x$ 有 $f[x][i]+=f[y][i-1]$ $g[x][i-1]+=g[y][i]$ $g[…
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…
[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 题解:很神的做法. 用f[x][a]表示x子树中有多少个深度为a的点,g[x][a]表示x子树中有多少到lca距离=d的点对,且lca的深度为d-a.那么容易得到转移方程: f[x][a]+=f[y][a-1]g[x][a]+=g[y][a+1]+f[x][a]*f…
题意 有一个树形结构,每条边的长度相同,任意两个节点可以相互到达.选3个点.两两距离相等.有多少种方案? 数据范围:n<=100000 分析 参照小蒟蒻yyb的博客. 我们先考虑一个\(O(n^2)\)的dp,也就是原题的做法. 我们考虑一下,三个点两两的距离相同是什么情况, 1.存在一个三个点公共的LCA,所以我们在LCA统计答案即可. 2.存在一个点,使得这个点到另外两个子树中距离它为d的点以及这个点的d次祖先. 所以,设\(f[i][j]\)表示以\(i\)为根的子树中,距离当前点为\(j…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4543 题解 这道题的弱化版 bzoj3522 [POI2014]Hotel 的做法有好几种吧. 我一开始是另一种做法,所以别人说这个题目可以有长链剖分来加速的时候怎么也想不出来. 枚举 \(i\),令点 \(i\) 为根,统计三个人的中心是 \(i\) 的情况.首先三个人一定在不同的子树中,然后分层统计一下就好了. 还有一个种纯 dp 的做法: 令 \(dp[x][i]\) 表示 \(x\)…
Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同. 有多少种方案能让吉丽满意? Input 第一行一个数n. 接下来n-1行,每行两个数x,y,表示x和y之间有一条边相连. Output 让吉丽满意的方案数. Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 5 Sample…