题意:
在一颗n个结点的树上给吉丽的三个妹子各开一个房间,使三个房间两两距离相等;
n<=5000,树上路径长度均为1;

题解:
首先因为树上两点间只有一条路径,所以这种路径下满足条件的三点只可能形成 以某个点为中心,三个点都到那个顶点距离相同的情况;
然后我们枚举每个点深搜,找出所有深度相同的点然后累乘C[x][3];
然后发现这么做是不对的!
因为我们将同一颗子树中深度相同的点也计入了答案中,它们之间的距离是不满足题中要求的;
那么换一种方式,每次统计根节点的某儿子的子树中深度一定的点,然后跑一个DP,状态为f[i][j][k]表示前i个儿子中深度和为j,选了k个的方案数,第一维可以滚动,累加k==3的情况就是答案啦;
注意一下开long long,时间复杂度不要写搓了就是O(n^2);

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 5100
using namespace std;
typedef long long ll;
int next[N<<1],to[N<<1],head[N],ce;
int deep[N],hash[N],last;
ll f1[N],f2[N];
void add(int x,int y)
{to[++ce]=y;next[ce]=head[x];head[x]=ce;
}
void dfs(int x,int pre)
{deep[x]=deep[pre]+1;hash[deep[x]]++;last=max(last,deep[x]);for(int i=head[x];i;i=next[i]){if(to[i]!=pre){dfs(to[i],x);}}
}
int main()
{int n,m,i,j,k,x,y;ll ans;scanf("%d",&n);for(i=1;i<n;i++){scanf("%d%d",&x,&y);add(x,y),add(y,x);}for(i=1,ans=0;i<=n;i++){deep[i]=0;memset(f1,0,sizeof(f1));memset(f2,0,sizeof(f2));for(k=head[i];k;k=next[k]){memset(hash,0,sizeof(int)*(last+5));last=0;dfs(to[k],i);for(j=1;j<=last;j++){ans+=hash[j]*f2[j];f2[j]+=f1[j]*hash[j];f1[j]+=hash[j];} }}printf("%lld\n",ans);return 0;
}

bzoj-3522 Hotel相关推荐

  1. 尝试一下LLJ大佬的理论AC大法

    1.BZOJ 3522 Poi2014 Hotel DFS 给定一棵树,求有多少无序三元组(x,y,z)满足x,y,z互不相等且Dis(x,y)=Dis(y,z)=Dis(x,z) 枚举中心点,分别d ...

  2. 【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 ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  5. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  6. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  7. POJ 3667 Hotel(线段树)

    POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...

  8. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  9. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

  10. BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...

最新文章

  1. Angular开发实践(一):环境准备及框架搭建
  2. C++游戏开发需要阅读的书籍
  3. 复数矩阵QR分解算法的C++实现
  4. Python脚本备份数据库
  5. All CUDA devices are used for display and cannot be used while debugging.
  6. linux输入不显示的处理 stty echo
  7. java基础编程思想题目
  8. java的前台与后台
  9. sklearn.metrics.roc_curve使用说明
  10. 自定义函数计算某个字符在字段中出现的次数
  11. java 网络编程 总结篇
  12. 16Aspx.com源码2013年10月到2013年12月详细
  13. 最新windows7旗舰版密钥
  14. GZIP压缩和解压缩不删除原始文件
  15. Flink入门系列05-时间语义
  16. python-包引入和.py打包成无需环境的.exe
  17. 分享一个二维码生成的接口,简单好用
  18. ABBYY FineReader Pro for Mac有哪些特性(下)
  19. windows系统 nginx域名基本配置
  20. “全球朋友,全球品牌,全球服务”民间全球沙龙在深圳举办;

热门文章

  1. 网络安全如何进行培训才有效
  2. 动态规划之最小编辑距离问题
  3. java 最烧脑的继承题_最烧脑的10道智力题!答对5道就是天才!
  4. 杭电计算机考研(初试+复试)经验分享
  5. 后端resection部分(后方交会,PnP、P3P、EPnp、Nakano P3P)
  6. 基于python的豆瓣FM(终端命令行界面)
  7. 【ESD专题】如何审查TVS管的数据手册
  8. 复杂网络多局域世界模型matlab算法实现
  9. python仿真图_python控制系统仿真库control(一)伯德图
  10. Redis(十九),老男孩linux视频