\(\mathcal{Description}\)

  Link.

  给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V,~|S|=x\land\sum_{u\in S}d_u=y\),其中 \(d_u\) 表示点 \(u\) 的度数。

  \(n\le2\times10^5\)。

\(\mathcal{Solution}\)

  方便期间,以下所有 \(d_u\) 表示 \(u\) 的度数 \(-1\)。

  出题人莫名其妙告诉你一棵树,无非是强调 \(\sum d=n-2\),自然想到根号分治。不过朴素 DP 的状态数量就已经难以接受,我们需要更多的结论。

  比如这个结论:

结论:若 \(x_1\le x_2\) 且 \((x_1,y),(x_2,y)\) 均合法,那么 \(\forall x_3\in[x_1,x_2],~(x_3,y)\) 也合法。

证明

  对于某个 $y$,取出最小 $x_l$ 和最大的 $x_r$,使得 $(x_l,y),(x_r,y)$ 合法。设 $\{d_n\}$ 中有 $z$ 个值为 $0$,则我们只需证明 $x_r-x_l\le 2z$,这是由于 $(x_l,y)$ 的选取中必然不含 $0$,那么 $(x_l+1,y),(x_l+2,y),\cdots,(x_l+z,y)$ 都合法,$(x_r-k,y)$ 同理。

  考虑任意一个 \(S\subseteq V\),令 \(d_S=\sum_{u\in S}d_u\),那么

  • \(d_S-|S|\ge -z\),显然;
  • \(d_S-|S|\le z-2\):\(d_S\le \sum d=n-2\),取等时 \(|S|\ge n-z\),得证。

  即 \(-z\le d_S-|S|\le z-2\),考虑将 \((x_l,y)\) 和 \((x_r,y)\) 代入,有 \(-z\le y-x_r\le y-x_l\le z-2\),可以推出 \(x_r-x_l\le 2z-2\),故已有原命题成立。 \(\square\)

  所以,我们只需要对于每个 \(y\),DP 求出 \(x_l\) 和 \(x_r\) 就能得到答案。DP 时根号分治,内部用单调队列优化即可。复杂度 \(\mathcal O(n\sqrt n)\)。

\(\mathcal{Code}\)

/*~Rainybunny~*/

#include <bits/stdc++.h>

#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) typedef long long LL; const int MAXN = 2e5;
int n, d[MAXN + 5], f[MAXN + 5], g[MAXN + 5]; inline void trans( const int v, const int c, const int r,
int* h, const auto& cmp ) { // cmp(a,b) is true <=> a is the better value.
static int que[MAXN + 5], th[MAXN + 5];
int hd = 1, tl = 0;
for ( int i = r; i <= n - 2; i += v ) {
th[i] = h[i];
while ( hd <= tl && que[hd] + c * v < i ) ++hd;
while ( hd <= tl
&& cmp( th[i] - i / v, th[que[tl]] - que[tl] / v ) ) --tl;
que[++tl] = i;
h[i] = th[que[hd]] + ( i - que[hd] ) / v;
}
} int main() {
scanf( "%d", &n );
rep ( i, 1, n ) d[i] = -1;
rep ( i, 2, n ) {
int u, v; scanf( "%d %d", &u, &v );
++d[u], ++d[v];
} std::sort( d + 1, d + n + 1 );
memset( f, 0x3f, sizeof f ), memset( g, 0xc0, sizeof g );
f[0] = g[0] = 0;
for ( int l = 1, r; l <= n; l = r + 1 ) {
for ( r = l; r < n && d[r + 1] == d[l]; ++r );
int v = d[l], c = r - l + 1;
if ( !v ) { g[0] = c; continue; }
rep ( r, 0, v - 1 ) {
trans( v, c, r, f,
[]( const int u, const int v ) { return u < v; } );
trans( v, c, r, g,
[]( const int u, const int v ) { return u > v; } );
}
} LL ans = 0;
rep ( i, 0, n - 2 ) {
// printf( "%d: [%d,%d]\n", i, f[i], g[i] );
if ( f[i] <= g[i] ) ans += g[i] - f[i] + 1;
}
printf( "%lld\n", ans );
return 0;
}

Solution -「ARC 125F」Tree Degree Subset Sum的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

  3. Solution -「HDU 5498」Tree

    \(\mathcal{Description}\)   link.   给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...

  4. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  5. Solution -「ARC 110D」Binomial Coefficient is Fun

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...

  6. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  7. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  8. Solution -「ARC 126F」Affine Sort

    \(\mathcal{Description}\)   Link.   给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...

  9. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

随机推荐

  1. 利用ajaxfileupload插件异步上传文件

    html代码: <input type="file" id="imgFile" name="imgFile" /> js代码: ...

  2. Linux上天之路(十)之Linux磁盘管理

    主要内容 磁盘介绍 磁盘管理 磁盘限额 逻辑卷管理 磁盘阵列 1. 磁盘介绍 硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘片有两面,都可记录信息.盘片 ...

  3. vue3+vant h5: Rem 移动端布局适配之postcss-pxtorem和lib-flexible

    如果不引入插件的话:ui稿的px转化成rem需自己计算 根据设计稿我们需要自己计算元素的rem(假如我们将html根元素font-size设置为41.4px): 那么1rem=41.4px; ui稿上 ...

  4. 学习javaScript必知必会(1)~js介绍、函数、匿名函数、自调用函数、不定长参数

    一.简单了解一下JavaScript(js) 1.什么是js? js:是网景公司开发的,是基于客户端浏览器, 面向(基于)对象.事件驱动式的页面脚本语言. 2.什么场景下使用到js? 表单验证.页面特 ...

  5. 【reverse】逆向1 数据宽度

    [reverse]逆向1 数据宽度 前言 感觉学逆向的都是大佬,正好最近在看java视频的时候,发现讲课的老师居然是从逆向行业转行来的,顿时肃然起敬.于是想在暑假的最后发光发热,把逆向的基础知识学习稳 ...

  6. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  7. MyCms 开源自媒体系统,系统配置字段说明

    功能说明 站点名称:站点的简要描述名称,没有启用SEO插件时,将用此字段用作站点标题. 站点地址:站点的完整地址(包含 http/https),此字段有多处依赖用于生成链接,请正确填写. 站点logo ...

  8. java-异常-异常应用

    1 package p1.exception; 2 3 4 /* 5 * 老师用电脑上课. 6 * 7 * 问题领域中涉及两个对象. 8 * 老师,电脑. 9 * 10 * 分析其中的问题. 11 * ...

  9. React/Vue 项目在 GitHub Pages 上部署时资源的路径问题

    GitHub Pages 常被用来部署个人博客,而无论是大名鼎鼎的 Jekyll,还是 Hugo 或者 Hexo,他们都是将我们的文章嵌入模板,发布为静态页面,也就是说,GitHub Pages (G ...

  10. linux字符编码防止乱码

    一:linux字符编码 en_US.UTF-8 : 美式英文,utf-8 zh_CN.UTF-8 临时优化 export LANG=zh_CN.UTF-8 : 设置编码 永久优化 vim /etc/l ...