题目描述

There are nn towns in Byteotia, connected with only n-1n−1 roads.

Each road directly links two towns.

All the roads have the same length and are two way.

It is known that every town can be reached from every other town via a route consisting of one or more (direct-link) roads.

In other words, the road network forms a tree.

Byteasar, the king of Byteotia, wants three luxury hotels erected to attract tourists from all over the world.

The king desires that the hotels be in different towns and at the same distance one from each other.

Help the king out by writing a program that determines the number of possible locations of the hotel triplet in Byteotia.

输入输出格式

输入格式:

The first line of the standard input contains a single integer nn (1\le n\le 5\ 0001≤n≤5 000), the number of towns in Byteotia.

The towns are numbered from 11 to nn.

The Byteotian road network is then described in n-1n−1 lines.

Each line contains two integers aa and bb (1\le a\le b\le n1≤a≤b≤n) , separated by a single space, that indicate there is a direct road between the towns aa and bb.

输出格式:

The first and only line of the standard output should contain a single integer equal to the number of possible placements of the hotels.

输入输出样例

输入样例#1: 复制

7

1 2

5 7

2 5

2 3

5 6

4 5

输出样例#1: 复制

5


给定一棵树,求有多少三点间距离两两相等


\(asuldb\)怒嘲这道题和给定一棵树求有多少点一样简单

其实三个点间距离两两相等当且仅当这三个点到同一个点距离相等且路径不重合,

我们处理出到距离每个点每个距离的点的个数,然后排列组合

每次换根,那么三个点一等在不同子树,所有情况-三个点在同一子树情况-两个点在同一子树情况即可


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
#define max(a,b) ((a)>(b)? (a):(b))
#define min(a,b) ((a)<(b)? (a):(b)) using namespace std; int dp[5011][5011],i,j,k,m,n,d[5011],ver[10011],nex[10011],head[10111],cnt,de[10011],x,y;
LL ans; void add(int x,int y)
{
cnt+=1;
ver[cnt]=y; nex[cnt]=head[x]; head[x]=cnt;
} void dfs1(int now,int fa,int f)
{
int r[10001];
for(int i=1;i<=f;i++) r[i]=d[i]; for(int i=1;i<=max(f,de[now]);i++)
{
if(d[i]>=3) ans-=(LL)d[i]*(d[i]-1)*(d[i]-2)/6; dp[now][i]+=d[i];
if(dp[now][i]>=3) ans+=(LL)dp[now][i]*(dp[now][i]-1)*(dp[now][i]-2)/6;
} for(int i=head[now];i;i=nex[i])
{
int t=ver[i];
if(t==fa) continue;
for(int j=1;j<=de[t];j++)
{
if(dp[t][j]>=3) ans-=(LL)dp[t][j]*(dp[t][j]-1)*(dp[t][j]-2)/6;
if(dp[now][j+1]>=3 && dp[t][j]>=2) ans-=(LL)dp[t][j]*(dp[t][j]-1)*(dp[now][j+1]-dp[t][j])/2;
}
} for(int i=1;i<=max(f,de[now]);i++)
if(d[i]>=2 && dp[now][i]>=3) ans-=(LL)d[i]*(d[i]-1)*(dp[now][i]-d[i])/2; for(int i=head[now];i;i=nex[i])
{
int t=ver[i];
int g=max(f+1,de[now]+1);
if(t==fa) continue;
for(int j=g;j>=2;j--)
d[j]=dp[now][j-1]-dp[t][j-2];
d[1]=1;
dfs1(t,now,g);
for(int j=1;j<=f;j++) d[j]=r[j];
} } void dfs(int now,int fa)
{
de[now]=1;
dp[now][0]=1;
for(int i=head[now];i;i=nex[i])
{
int t=ver[i];
if(t==fa) continue;
dfs(t,now);
de[now]=max(de[now],de[t]+1);
for(int j=0;j<=de[t];j++) dp[now][j+1]+=dp[t][j];
}
} int main()
{
scanf("%d",&n);
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1,0);
dfs1(1,0,1);
printf("%lld",ans);
}

P3565 [POI2014]HOT-Hotels的更多相关文章

  1. luogu P3565 [POI2014]HOT-Hotels

    传送门 无脑暴力+O2=AC 题目要统计距离两两相等的三个点的组数,这三个点之间显然有一个点,并且这三个点到这个点的距离都相同.所以枚举中间这个点作为根,然后bfs整棵树,对于每一层,把以根的某个儿子 ...

  2. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  3. 2016 ICPC青岛站---k题 Finding Hotels(K-D树)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5992 Problem Description There are N hotels all over ...

  4. hdu-5992 Finding Hotels(kd-tree)

    题目链接: Finding Hotels Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 102400/102400 K (Java/ ...

  5. BZOJ 3524: [Poi2014]Couriers [主席树]

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1892  Solved: 683[Submit][St ...

  6. BZOJ 3524: [Poi2014]Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1905  Solved: 691[Submit][St ...

  7. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  8. 【BZOJ】【3522】【POI2014】Hotel

    暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...

  9. 【BZOJ】【3831】【POI2014】Little Bird

    DP/单调队列优化 水题水题水题水题 单调队列优化的线性dp…… WA了8次QAQ,就因为我写队列是[l,r),但是实际操作取队尾元素的时候忘记了……不怎么从队尾取元素嘛……平时都是直接往进放的……还 ...

随机推荐

  1. C# 学习笔记(二) 时间格式化字符串

    1. 以下4种时间格式化符号输出的固定时间格式在各个区域设置中都应是相同的: 标准格式字符串 由 DateTimeFormatInfo.InvariantInfo 属性定义 自定义格式字符串 “O”或 ...

  2. Hadoop shell 一查就会

    Hadoop shell 命令有三种格式 hdfs + dfs (必须是dfs) Hadoop + dfs Hadoop + df 命令 说明 hadoop 版本查看 hadoop version h ...

  3. Springboot集成SpringData JPA

    序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...

  4. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  5. ASP.NET MVC扩展库

    很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展库,主要就是针对这些扩展点进行.这个项目的核心是IOC容器,包括Ninject ...

  6. Extjs checkbox数值回显

    昨天上午花了半天时间都在调 extjs的编辑页面里的CheckBox的回显问题,一直没搞定,毕竟我接触extjs才一个月不到,属于小白.先上个图: 这就是编辑页面的时候,需要的效果.然后我代码里是用了 ...

  7. for、for..in、forEach、$.each等循环性能测试

    var num = 10000000,arr = []; for(i=0;i<num;i++){ arr[i] = i+2; } //1) 使用 for 循环 function test1() ...

  8. FFmpeg实现将图片转换为视频

    ##名称:ffmpeg实现将图片转换为视频 ##平台:ubuntu(已经安装好了ffmpeg工具) ##日期:2017年12月10日 简介: 因为学习需要,需要将连续图片转换成视频,昨天和今天早上用o ...

  9. android studio 加载libs

    eclipse 项目转 android studio libs  不能加载 导致不能导入 记录下:libs 放在和src 同路径 dependencies:增加 compile files('libs ...

  10. 网络I/O模型--01阻塞模式(普通)

    很长一段时间内,大多数网络通信方式都是阻塞模式,即: · 客户端 向服务器端发出请求后,客户端会一直处于等待状态(不会再做其他事情),直到服务器端返回结果或者网络出现问题 . · 服务器端同样如此,当 ...