BZOJ 4835: 遗忘之树
首先设 $f[x]$ 表示点分树上 $x$ 的子树内的方案数
发现对于 $x$ 的每个儿子 $v$ ,$x$ 似乎可以向 $v$ 子树内的每个节点连边,因为不管怎么连重心都不会变
显然是错的,题目描述中说如果有多个重心取编号最小的,所以如果 $v$ 的子树大小恰好为 $x$ 的子树大小的一半
那么 $x$ 只能向 $v$ 中编号大于 $x$ 的节点连边,找编号比较大的直接暴力找即可,因为点分树的深度是 $\log n$ 的
每个点最多被每个祖先枚举到一次,所以复杂度 $O(n \log n)$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e5+,mo=1e9+;
int T,n,m;
int fir[N],from[N<<],to[N<<],cntt;
inline void add(int a,int b) { from[++cntt]=fir[a]; fir[a]=cntt; to[cntt]=b; }
int f[N],sz[N];
bool vis[N];
int calc(int x,int k)
{
int res=x>k;
for(int i=fir[x];i;i=from[i])
res+=calc(to[i],k);
return res;
}
void dfs(int x)
{
sz[x]=f[x]=;
for(int i=fir[x];i;i=from[i])
{
int &v=to[i];
dfs(v); sz[x]+=sz[v];
}
bool flag=!(sz[x]&); int t=sz[x]>>;
for(int i=fir[x];i;i=from[i])
{
int &v=to[i],cnt=;
if(flag && sz[v]==t)
cnt=calc(v,x);
else cnt=sz[v];
f[x]=1ll*f[x]*f[v]%mo*cnt%mo;
}
}
int main()
{
T=read();
while(T--)
{
for(int i=;i<=n;i++) fir[i]=vis[i]=; cntt=;
n=read(),m=read();
for(int i=;i<n;i++)
{
int a=read(),b=read();
add(a,b); vis[b]=;
}
int rt=;
for(int i=;i<=n;i++)
if(!vis[i]) { rt=i; break; }
dfs(rt);
printf("%d\n",f[rt]);
}
return ;
}
BZOJ 4835: 遗忘之树的更多相关文章
- bzoj 4835: 遗忘之树 [树形DP]
4835: 遗忘之树 题意:点分治,选标号最小的重心,上一次重心向下一次重心连有向边,求原树方案数. md我真不知道当初比赛时干什么去了...现在一眼秒啊... \(size[v]=\frac{siz ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- BZOJ.4184.shallot(线段树分治 线性基)
BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...
- [BZOJ 2759] 一个动态树好题
[BZOJ 2759] 一个动态树好题 题目描述 首先这是个基环树. 然后根节点一定会连出去一条非树边.通过一个环就可以解除根的答案,然后其他节点的答案就可以由根解出来. 因为要修改\(p_i\),所 ...
- [BZOJ 4025]二分图(线段树分治+带边权并查集)
[BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\ ...
- BZOJ 2243: [SDOI2011]染色 [树链剖分]
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6651 Solved: 2432[Submit][Status ...
- 【BZOJ 3476】 线段树===
59 懒惰的奶牛贝西所在的牧场,散落着 N 堆牧草,其中第 i 堆牧草在 ( Xi,Yi ) 的位置,数量有 Ai 个单位.贝西从家移动到某一堆牧草的时候,只能沿坐标轴朝正北.正东.正西.正南这四个 ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
随机推荐
- 关于AngularJS与其他前端框架混合使用的思考
AngularJS 是一个为动态WEB应用设计的结构框架,拥有双向数据绑定,模板,MVVM,依赖注入,指令5大优点,Angular最有诱惑力的就是数据绑定功能,使用MVC模式进行开发,Angular在 ...
- window10 安装.net framework 2.0插件
1 背景 电脑升级到window10操作系统之后,在使用过程中安装某些软件(如 BI publisher)需要用到.net framework 2.0/3.5 框架. 例如:直接安装BI publis ...
- 自动化测试 | 好用的自动化测试工具Top 10
欲善其事必先利其器,本文从软件测试人员痛点出发,介绍如何先从工具选择上取得优势,在有限的时间内完成工作.经常有人在公众号留言或是后台咨询,做自动化测试用哪个工具好,或是学哪门编程语言好呢? 这个时候总 ...
- Fast R-CNN论文阅读摘要
论文链接: https://arxiv.org/pdf/1504.08083.pdf 代码下载: https://github.com/rbgirshick/fast-rcnn Abstract Co ...
- <HTML>在一个表格内嵌套另一个表格时,如何居中?
在一个表格内嵌套另一个表格时,如何居中? 假设大表格为: <table id="tableRow"> <tr> <th>City</th& ...
- 短信的内容提供者Uri和短信表结构
* sms表 * address :手机号码 * date :收发短信的时间 * read :短信的阅读状态 1,已读 0,未读 * type :收发短信的类型 1,收到短信 2,发出短信 * bod ...
- vue指令实现拖动的高级写法
不熟悉vue自定义指令看这里: https://cn.vuejs.org/v2/guide/custom-directive.html vue指令实现拖动方法很方便也挺简单,但是网上大部分的教程代码, ...
- React Native初始化项目0.47.1报错
首先看一下安卓和iOS报错: iOS终端运行报错: Xcode运行报错: 解决办法一: 将版本降到0.44.3,修改package,具体请看我的另一篇博客: http://www.cnblogs.co ...
- uni-app相关
uni-app 中以下组件的高度是固定的,不可修改: 导航栏高度固定为 44pxtabBar 高度固定为 56px 状态栏比较特殊,是一个变量 .status_bar{ height: var(--s ...
- Django:(03)请求和响应
一.HttpRequest 客户端传参的几种方式 传递方式 示例 后端获取方式 数据类型 url路径(path) /news/1/2 正则匹配 str 查询字符串 /news2?category=1& ...