bzoj-3522 Hotel
题意:
在一颗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相关推荐
- 尝试一下LLJ大佬的理论AC大法
1.BZOJ 3522 Poi2014 Hotel DFS 给定一棵树,求有多少无序三元组(x,y,z)满足x,y,z互不相等且Dis(x,y)=Dis(y,z)=Dis(x,z) 枚举中心点,分别d ...
- 【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 ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- POJ 3667 Hotel(线段树)
POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec Memory Limit: 512 MB Submit: 53 Solved: 9 [Su ...
- BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...
最新文章
- Angular开发实践(一):环境准备及框架搭建
- C++游戏开发需要阅读的书籍
- 复数矩阵QR分解算法的C++实现
- Python脚本备份数据库
- All CUDA devices are used for display and cannot be used while debugging.
- linux输入不显示的处理 stty echo
- java基础编程思想题目
- java的前台与后台
- sklearn.metrics.roc_curve使用说明
- 自定义函数计算某个字符在字段中出现的次数
- java 网络编程 总结篇
- 16Aspx.com源码2013年10月到2013年12月详细
- 最新windows7旗舰版密钥
- GZIP压缩和解压缩不删除原始文件
- Flink入门系列05-时间语义
- python-包引入和.py打包成无需环境的.exe
- 分享一个二维码生成的接口,简单好用
- ABBYY FineReader Pro for Mac有哪些特性(下)
- windows系统 nginx域名基本配置
- “全球朋友,全球品牌,全球服务”民间全球沙龙在深圳举办;