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

正题

题目链接:https://www.luogu.com.cn/problem/P5904


题目大意

nnn个点的一棵树,求有多少个点对(i,j,k)(i,j,k)(i,j,k)使得这三个点距离相等。


解题思路

有两种情况,一是iiij,kj,kj,k的祖先,二是i,j,ki,j,ki,j,k互相没有祖先关系

考虑dpdpdpfi,jf_{i,j}fi,j表示iii点的子树中与iii距离为jjj的点的个数,然后gi,jg_{i,j}gi,j表示iii的子树中满足有多少个点(x,y)(x,y)(x,y)对使得dis(x,lca)=dis(y,lca)=dis(i,lca)+jdis(x,lca)=dis(y,lca)=dis(i,lca)+jdis(x,lca)=dis(y,lca)=dis(i,lca)+j。然后考虑统计答案
ans+=gy,i∗fx,i−1+gx,i+1∗fy,ians+=g_{y,i}*f_{x,i-1}+g_{x,i+1}*f_{y,i}ans+=gy,ifx,i1+gx,i+1fy,i
然后考虑这个点对ggg的影响有
gx,i+1+=fx,i+1∗fy,ig_{x,i+1}+=f_{x,i+1}*f_{y,i}gx,i+1+=fx,i+1fy,i
然后继承gx,i−1+=gy,i,fx,i+1+=fy,ig_{x,i-1}+=g_{y,i},f_{x,i+1}+=f_{y,i}gx,i1+=gy,i,fx,i+1+=fy,i

然后可以长链剖分进行优化,fff在长链上向后运动,但是ggg是向前运动的。

考虑结点111,因为每次向前运动要放在len1len_1len1的位置,但是该位置向后又要储存len1len_1len1个值,所以我们要开两倍的空间

时间复杂度O(n)O(n)O(n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=4e5+10;
struct node{ll to,next;
}a[N*2];
ll n,tot,ans,ls[N],son[N];
ll len[N],buff[N*2],bufg[N*2];
ll *f[N*2],*g[N*2],*nowf,*nowg;
void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(ll x,ll fa){for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa)continue;dfs(y,x);if(len[y]>len[son[x]])son[x]=y;}len[x]=len[son[x]]+1;return;
}
void solve(ll x,ll fa){f[x][0]=1;if(son[x]){f[son[x]]=f[x]+1;g[son[x]]=g[x]-1;solve(son[x],x);}ans+=g[x][0];for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==son[x]||y==fa)continue;f[y]=nowf;nowf+=len[y];nowg+=len[y]*2+10;g[y]=nowg++;solve(y,x);for(ll j=0;j<len[y];j++){if(j)ans+=g[y][j]*f[x][j-1];ans+=g[x][j+1]*f[y][j];}for(ll j=0;j<len[y];j++){g[x][j+1]+=f[y][j]*f[x][j+1];if(j)g[x][j-1]+=g[y][j];f[x][j+1]+=f[y][j];}}return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}dfs(1,1);nowf=buff;nowg=bufg;nowf+=len[1];nowg+=len[1]*2+10;f[1]=buff;g[1]=nowg++;solve(1,1);printf("%lld",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初一级模拟试题总结(2019.3.2)

成绩 rank算上了其他大佬 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf400400400100100100100100100100100100100100100111wjjwjjwjj280280280100100100808080000100100100111tjhtjhtjh200200200100100100000000100100100111fyfyfy200200200…

ASP.NET Core Razor生成Html静态文件

一、前言最近做项目的时候&#xff0c;使用Util进行开发&#xff0c;使用Razor写前端页面。初次使用感觉还是不大习惯&#xff0c;之前都是前后端分离的方式开发的&#xff0c;但是使用Util封装后的Angular后&#xff0c;感觉开发效率还是杠杠滴。二、问题在发布代码的时候&…

NEERC2017 Archery Tournament 线段树 新套路

题目链接 http://codeforces.com/gym/101630/attachments/download/6401/20172018-acmicpc-northeastern-european-regional-contest-neerc-17-en.pdf 题意 给出一些圆&#xff0c;这些圆圆心在x轴上方&#xff0c;且与x轴相切&#xff0c;任意时刻&#xff0c;不存在图上的…

P2178-[NOI2015]品酒大会【SA,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P2178 题目大意 长度为nnn的字符串&#xff0c;每个位置有一个权值。 如果对于q,pq,pq,p有sq,qr−1sp,pr−1s_{q,qr-1}s_{p,pr-1}sq,qr−1​sp,pr−1​那么就称q,pq,pq,p为rrr相似。 对于每个rrr求有多少对q,pq,pq,p是rrr相似…

【Floyed】【最短路】商店选址问题(ssl 1760)

商店选址问题 ssl 1760 题目大意&#xff1a; 有一些点&#xff0c;在一个点上按医院&#xff0c;有一个值就是这个点到其他点的最短路之和&#xff0c;问这个值最小是多少 原题&#xff1a; Description 给出一个城市的地图&#xff08;用邻接矩阵表示&#xff09;&…

一文看懂.NET的各种变体

曾几何时&#xff0c;我们只有一个.NET&#xff0c;叫作.NET Framework。如果想要开发.NET应用程序&#xff0c;只要使用.NET Framework即可&#xff0c;非常简单。几年之后&#xff0c;出现了.NET变种的寒武纪大爆发&#xff08;我们称之为“.NET大爆炸”&#xff09;&#xf…

Codeforces Gym - 100917 部分题解

A.Abstract Picture Gym - 100917A 分析&#xff1a;由于最后刷的一笔肯定使得某一行或者是某一列均为相同的颜色。 因此我们可以在一开始找到所有的行或者列&#xff0c;他们的颜色全都一样&#xff0c;把这样的行或列加入到队列里面去。 我们处理在队列里面的行或者列&…

【最短路】【Floyed】医院设置(ssl 1614)

医院设置 ssl 1614 题目大意&#xff1a; 有n个点&#xff0c;在一个点上安医院&#xff0c;使这个点到其他点的最短路之和最小 原题&#xff1a; Description 设有一棵二叉树&#xff08;如右图&#xff09;。其中&#xff0c;圈中的数字表示结点中居民的人口。圈边上数…

牛客练习赛69C-旅行【结论,最大生成树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7329/C 题目大意 disx,ydis_{x,y}disx,y​表示x,yx,yx,y的所有路径的最短的边的最大值。 求一个1∼n1\sim n1∼n的排列&#xff0c;使得∑i2ndisi,i−1\sum_{i2}^ndis_{i,i-1}∑i2n​disi,i−1​最大 解题思路 首先一定是…

拓展 NLog 优雅的输送日志到 Logstash

在上上篇博客通过对aspnetcore启动前配置做了一些更改&#xff0c;以及对nlog进行了自定义字段&#xff0c;可以把请求记录输送到mysql&#xff0c;正式情况可能不会这么部署。因为近期也在学习elk&#xff0c;所以就打算做一个实例&#xff0c;结合nlog把日志输送到logstash&a…

曼哈顿距离与切比雪夫距离的转化及prufer序列

目录 曼哈顿距离与切比雪夫距离的相互转化prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x_1 - x…

初一模拟赛总结(2019.3.9)

成绩&#xff1a; rank算上了其他大佬 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4222lyflyflyf230230230100100100303030000100100100333hkyhkyhky909090000000000909090444fyfyfy808080000606060000202020444whdwhdwhd808080202020606060000000666lth…

牛客练习赛69E-子串【树状数组】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7329/E 题目大意 给出一个nnn的排列&#xff0c;求有多少个区间[l,r][l,r][l,r]使得最大值是rrr&#xff0c;最小值是lll。 解题思路 首先对于一个位置的值作为左端点和右端点都有一段合法区间&#xff08;到左边第一个比…

[译]如何在.NET Core中使用System.Drawing?

你大概知道System.Drawing&#xff0c;它是一个执行图形相关任务的流行的API&#xff0c;同时它也不属于.NET Core的一部分。最初是把.NET Core作为云端框架设计的&#xff0c;它不包含非云端相关API。另一方面&#xff0c;.NET Core是跨平台框架&#xff0c;它不包含任何操作系…

【dfs】棋盘变幻

棋盘变幻 题目大意&#xff1a; 有一些棋子&#xff08;黑/白&#xff09;&#xff0c;可以将某一列的棋子颜色反转&#xff0c;要黑棋尽可能小 原题&#xff1a; 题目描述 小G在一个n*m的棋盘上随意放上了一些黑色的棋子&#xff0c;然后又在剩下所有没有放棋子的格子里放…

组合数学与数论函数专题

组合数学专题 专题简介 本专题包含了一些组合数学中常见的套路和方法,如拉格朗日插值,动态规划,容斥原理,狄利克雷卷积,线性筛,杜教筛 等等. 目录 2018 四川省赛GRISAIA (数论分块)HDU 6428 Calculate (狄利克雷卷积,线性筛)BZOJ4559 成绩比较 (动态规划,拉格朗日插值)BZOJ…

关于Visual Studio 2019的前期详情

近日&#xff0c;来自微软公司的 John Montgomery 正式宣布&#xff0c;Visual Studio 2019已进入开发阶段。Montgomery 表示&#xff0c;之所以选择在这个时间点公开这个消息&#xff0c;是因为微软准备在 GitHub 上公开可见的项目&#xff08;包括 .NET 和 Roslyn&#xff09…

nssl1522-简单数数题【dp】

正题 题目大意 nnn个数的一个集合&#xff0c;求一个有多少个子集使得这个子集的所有子集的权值和的和是mmm的倍数 解题思路 考虑dp&#xff0c;选中集合中每一个数的贡献次数是2∣S∣−12^{|S|-1}2∣S∣−1&#xff0c;设fi,j,kf_{i,j,k}fi,j,k​表示选到第iii&#xff0c;现…

蛋糕店

蛋糕店 题目大意&#xff1a; 有n个人&#xff0c;让他们排队&#xff0c;每个人都有一个愤怒值&#xff0c;总值为每个人的愤怒值乘上&#xff08;他在队列中的位置-1&#xff09;加在一起 原题&#xff1a; 题目描述 最近小G新开了一家蛋糕店。开业第一天&#xff0c;一…

开源的,跨平台的.NET机器学习框架ML.NET

微软在Build 2018大会上推出的一款面向.NET开发人员的开源&#xff0c;跨平台机器学习框架ML.NET。 ML.NET将允许.NET开发人员开发他们自己的模型&#xff0c;并将自定义ML集成到他们的应用程序中&#xff0c;而无需事先掌握开发或调整机器学习模型的专业知识。在采用通用机器学…