Comet OJ - Contest #2 (D 错综的光影所迷惑的思念是) 容斥计数
题意:给定一颗 $n$ 个节点的树,定义 $dis(x,y)$ 为树上点 $x$ 到 $y$ 的路径经过的边数.
定义一个点集 $S$ 的 $f(S)$ 为 $f(S)=max\left \{dis(x,y)|x,y\in S\right \}$ $,|S|\geqslant2$
求:对于 $i$ ,有少个点集 $S$ 满足 $|S|\geqslant 2$ 且 $f(S)=i$
题解:
上面那个 $f(S)$ 就是这个点集的直径.
考虑枚举直径,我们知道树上的直径有奇数条边/偶数条边两种情况,这里先讲一下直径为偶数条边的情况,奇数条边同理.
假设当前直径为 $i$,那么我们可以枚举直径的中心点 $p$,也可以看作是我们要枚举的点集的中心点.
我们先让 $p$ 为这颗树的树根.
假设当前枚举的半径的半径为 $j$,那么显然 $p$ 的子树中深度为 $(j-1)$ 的点都是可以随便选的(可选可不选).
令这部分方案数为 $re$,则 $re=2^{dep[j-1]}$ 其中 $dep[i]$ 表示当前根的子树中所有深度小于等于 $i$ 的节点数量.
枚举完可以随便选的部分,再枚举一下深度恰好为 $j$ 的部分:令 $sum[j]$ 表示所有儿子中深度恰好为 $j$ 的数量.
那么我们只需保证在这么多点中选大于等于 $2$ 个点即可.
这个的方案数为 $2^{sum[j]}-1$,然后减掉只有一个的情况,就是 $\sum_{v\in son[p]} 2^{cnt[v][j]}-1$
因为直径可能是奇数,所以将每条边拆成一个点连两条边即可.
#include <bits/stdc++.h>
#define N 4010
#define ll long long
#define mod 998244353
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int edges,now,n;
int hd[N<<1],to[N<<2],nex[N<<2],cnt[N<<1][N],sum[N],bin[N],ans[N];
void add(int u,int v)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void dfs(int u,int ff,int d)
{
if(u<=n) ++sum[d], ++cnt[now][d];
for(int i=hd[u];i;i=nex[i]) if(to[i]!=ff) dfs(to[i], u, d+1);
}
int main()
{
// setIO("input");
int i,j;
scanf("%d",&n);
bin[0]=1;
for(i=1;i<=n;++i) bin[i]=bin[i-1]*2%mod;
for(i=1;i<n;++i)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,i+n),add(i+n,u);
add(i+n,v),add(v,i+n);
}
for(i=1;i<=2*n;++i)
{
now=0;
for(j=hd[i];j;j=nex[j]) ++now, dfs(to[j],i,1);
int re=(i<=n);
for(j=1;j<n;++j)
{
int mdl=bin[sum[j]]-1;
for(int k=1;k<=now;++k)
{
(mdl+=mod-bin[cnt[k][j]]+1)%=mod;
}
(ans[j]+=(ll)mdl*bin[re]%mod)%=mod;
re+=sum[j];
}
memset(sum,0,sizeof sum);
for(j=1;j<=now;++j) memset(cnt[j], 0, sizeof cnt[j]);
}
for(i=1;i<n;++i)
printf("%d\n",(ans[i]+mod)%mod);
return 0;
}
Comet OJ - Contest #2 (D 错综的光影所迷惑的思念是) 容斥计数的更多相关文章
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- Comet OJ - Contest #2题解
传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(k\)增长非常快,大力模拟一下就行了 int main(){ scanf("% ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #4--前缀和
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
- Comet OJ - Contest #13-C2
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
随机推荐
- S03_CH10_DMA_4_Video_Stitch视频拼接系统
S03_CH10_DMA_4_Video_Stitch视频拼接系统 10.1概述 注意:本课程和上一课程<S03_CH09_DMA_4_Video_Switch视频切换系统>基本相同,不同 ...
- 【C#】上机实验一
1.开发一个控制台应用程序,根据提示从键盘获取一个华氏温度,请转换并输出对应的摄氏温度. using System; namespace Project { class Program { publi ...
- SAS学习笔记15 SAS导入数据(import txt csv xlsx spss)
- 部署java应用的几种方式
J2EE应用 该应用根目录下有好多文件夹和以jsp结尾的文件 部署时,需要在tomcat的conf目录下的server.xml文件中添加上<Context path="/" ...
- CentOS7/RHEL6下,如何查看目录与子目录大小
原文:CentOS7/RHEL6下,如何查看目录与子目录大小 通过强大的[du]命令,可以帮助我们快捷的查看目录的大小,非常实用. du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du ...
- Project Oberon
Project Oberon Project Oberon http://www.projectoberon.com/ Project Oberon 28.11.2018 / 11.12.2018 ...
- JS基础_构造函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 安装mysql采坑记录
安装之前彻底卸载之前的mysql,再次安装,初始化数据库那一步失败. 再次彻底卸载mysql,把原先的安装路径的文件夹删除,文件夹路径:C:\ProgramData,再次安装,成功. 总结:重装mys ...
- 基于【 Docker】二 || Docker的入门安装
一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3. ...
- js写guess网页
(一)布局 猜前 -> 猜后 (二)明确实现功能和具体实现: 1.网页生 ...