【BZOJ3244】【NOI2013】树的计数(神仙题)
【BZOJ3244】【NOI2013】树的计数(神仙题)
题面
这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\)
题解
数的形态和编号没有关系,因此对于\(bfs\)序重标号,同时修改一下\(dfs\)序方便做题。
因为\(bfs\)的层数等于树高,所以我们相当于要把\(bfs\)划分为若干段,
那么,每一种\(bfs\)划分显然要么不合法,要么对应一种树的形态。
那么,我们来考虑\(bfs\)划分的几个限制。
首先有一个很明显的限制:
如果划分了一段\([L,R]\),那么\(dfn[L]<dfn[L+1]<...<dfn[R]\)
原因很简单,因为一个点的所有儿子对应的出现顺序在\(bfs\)和\(dfs\)序中相同
显然所有儿子都是从左往右遍历,因此这一项显然成立。
令\(pos\)为\(dfs\)序的反数组,
考虑\(dfs\)序中相邻的两个元素\(x,x+1\)。
显然要么是父子关系,要么是兄弟关系,要么\(x+1\)是\(x\)祖先的儿子。
所以可以列出不等式\(dep[x+1]\le dep[x]+1\)
当然了,还有一个约束,根节点后面必须断开。
我们构建一个数组\(s\),\(s[i]=1\)的话就表示\(i\)和\(i+1\)必须断开
归类一下,约束条件有三项:
1.根节点后面必须断开,而根节点一定是\(bfs\)序中的\(1\)
2.同一段\([l,r]\)中的所有点满足\(dfs\)序递增,即如果\(pos[i]>pos[i+1]\),那么必须断开,也就是\(s[i]=1\)
3.如果\(dfn[i]<dfn[i+1]\),那么,\(\sum_{j=dfn[i]}^{dfn[i+1]-1} s[i]\le 1\),这个式子在计算的时候需要满足\(dfn[i]\lt dfn[i+1]\),而根据推导\(dep[i+1]-dep[i]\le 1\)。
如果知道了\(s\),那么\(1+\sum s[i]\)就是树高,也就是\(bfs\)序分开的段数。
考虑一下贡献是怎么产生的。
两个相邻的\(bfs\)序之间要么不能断开,贡献为\(0\)
要么必须断开,贡献为\(1\)
要么随意,贡献为\(0.5\)
只需要利用所有约束条件确定每个位置的贡献就好啦。
我是看得LCF学长的blog
#include<iostream>
#include<cstdio>
using namespace std;
#define RG register
#define MAX 222222
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
double ans;
int n,a[MAX],d[MAX],s[MAX];
int main()
{
n=read();ans=1;s[1]=1;s[2]=-1;
for(int i=1;i<=n;++i)a[d[i]=read()]=i;
for(int i=1;i<=n;++i)d[a[read()]]=i;
for(int i=1;i<=n;++i)a[d[i]]=i;
for(int i=2;i<=n;++i)if(a[i]<a[i-1])s[i-1]++,s[i]--,++ans;
for(int i=2;i<=n;++i)if(d[i-1]<d[i]-1)s[d[i-1]]++,s[d[i]]--;
for(int i=1,t=0;i<n;++i)t+=s[i],ans+=(!t)?0.5:0;
printf("%.3lf\n",ans+1);
return 0;
}
【BZOJ3244】【NOI2013】树的计数(神仙题)的更多相关文章
- BZOJ3244 NOI2013树的计数(概率期望)
容易发现的一点是如果确定了每一层有哪些点,树的形态就确定了.问题变为划分bfs序. 考虑怎样划分是合法的.同一层的点在bfs序中出现顺序与dfs序中相同.对于dfs序中相邻两点依次设为x和y,y至多在 ...
- [BZOJ3244][NOI2013]树的计数
这题大家为什么都写O(NlogN)的算法呢?…… 让本蒟蒻来写一个O(N)的吧…… 首先还是对BFS序和DFS序重编号,记标好的DFS序为d[1..n].令pos[x]为x在d[]中出现的位置,即po ...
- [bzoj3244][noi2013]树的计数 题解
UPD: 那位神牛的题解更新了,在这里. ------------------------------------------------------------------------------- ...
- BZOJ3244 [Noi2013]树的计数 【数学期望 + 树遍历】
题目链接 BZOJ3244 题解 不会做orz 我们要挖掘出\(bfs\)序和\(dfs\)序的性质 ①容易知道\(bfs\)序一定是一层一层的,如果我们能确定在\(bfs\)序中各层的断点,就能确定 ...
- [UOJ#122][NOI2013]树的计数
[UOJ#122][NOI2013]树的计数 试题描述 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序.两棵不同的树的 DFS 序 ...
- 【BZOJ3244】【UOJ#122】【NOI2013]树的计数
NOI都是酱的题怎么玩啊,哇.jpg 原题: 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的 ...
- [bzoj3244] [洛谷P1232] [Noi2013] 树的计数
Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...
- BZOJ3244/UOJ122 [Noi2013]树的计数
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树 ...
- 3244: [Noi2013]树的计数 - BZOJ
Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...
随机推荐
- [备忘]Windows Server 2008 R2部署FTP FileZilla Server防火墙设置
有一台服务器,之前文件迁移少,现准备用FileZilla Server当FTP服务器,服务器系统是Windows Server 2008 R2,同样适用FileZilla Client连接服务器FTP ...
- Python爬虫与反爬虫(7)
[Python基础知识]Python爬虫与反爬虫(7) 很久没有补爬虫了,相信在白蚁二周年庆的活动大厅比赛中遇到了关于反爬虫的问题吧 这节我会做个基本分享. 从功能上来讲,爬虫一般分为数据采集,处理, ...
- 第四篇 前端学习之JQuery基础
一 jQuery是什么? jQuery就是一个JavaScript的库. <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入 ...
- 7个Node.js的Web框架
NodeJS也就是Node,是众所周知的使用javascript构建Web应用框架,它启动一个服务器非常简单,如下: var http = require('http'); http.createSe ...
- leetcode个人题解——#43 Multiply Strings
思路:高精度乘法就可以了. 有两个错误以前没在意,1.成员属性定义时候不能进行初始化, vector<); 这样隐性调用了函数进行初始化的形式特别要注意,也是错误的: 2.容器类只有分配了空间时 ...
- 如何选择合适的Qt5版本?
注意:这里讨论的是在不编译Qt源码的情况下,推荐下载的官方编译版本. 支持XP SP3以及之后的Windows版本:推荐 Qt5.6 或 Qt5.9,这两个版本是LTS版本(即长期支持版本),Bug较 ...
- KETTLE监控
kettle单实例环境下自身没有监控工具,但在集群下自带了监控工具. 一.集群自带的监控 kettle自带的集群监控工具可以监控转换的执行情况. 配置好集群后,打开浏览器:输入http://local ...
- 【Alpha】阶段第五次Scrum Meeting
[Alpha]阶段第五次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 增加课程接口 增加教师接口 赵智源 整合前端进行部署 构建后端测试点测试框架 肖萌威 编 ...
- Android开发第二阶段(4)
今天:对按扭位置重新调整了一下布局了一下,改变了layout中见面的字体格式等等是其更美观. 明天:对图片的修改和替换.
- html、JSP运行原理
HTML运行原理 1.本地运行 所谓本地运行就是直接用 浏览器打开 2.远程访问的原理示意图: 何为协议?计算机互相通信(网络)的规则.常见的协议有 http .smtp. ftp.pop等 ...