当前位置:网站首页>CF1527D MEX Tree (mex & tree & inclusive)
CF1527D MEX Tree (mex & tree & inclusive)
2022-08-04 14:15:00 【Harris-H】
CF1527D MEX Tree(mex&树&容斥)
Consider simple tolerance, m e x i mex_i mexi 等于包含 [ 0 , i − 1 ] [0,i-1] [0,i−1]All paths are subtracted inclusive [ 0 , i ] [0,i] [0,i]的路径.
记录: a n s i ans_i ansi为包含 [ 0 , i ] [0,i] [0,i]的所有路径.
m e x i = a n s i − 1 − a n s i mex_i=ans_{i-1}-ans_i mexi=ansi−1−ansi
m e x 0 = n ( n − 1 ) 2 − a n s 0 mex_0=\dfrac{n(n-1)}{2}-ans_0 mex0=2n(n−1)−ans0
转化为求 a n s i ans_i ansi
Consider recursion from small to large.
当前包含 [ 0 , i − 1 ] [0,i-1] [0,i−1]The shortest path endpoints are l , r l,r l,r.
情况1 i i i在 l , r l,r l,r路径上,不用操作.
情况2 i i i为 l l l或 r r rsubtree node of,将 l l l或 r r r移动到 i i i上,The answer is the product of the sizes of the two subtrees.
情况3 i i i不是 l , r l,r l,r的两个 l c a lca lca,说明无解,直接break,后面的 i i i都无解.
注意当 l = 1 l=1 l=1或 r = 1 r=1 r=1 To subtract the size of each other's subtree,再乘积.
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
#include<bits/stdc++.h>
using namespace std;
#define ri register int
typedef long long ll;
const int maxn=2e5+10;
struct node{
int to,nxt;
}e[maxn<<1];
int hd[maxn],len;
inline void addedge(int fr,int to){
e[++len]={
to,hd[fr]};
hd[fr]=len;
}
int dep[maxn],fa[maxn],n,son[maxn],t,top[maxn];
ll siz[maxn];
void dfs1(int p,int f){
dep[p]=dep[f]+1;
fa[p]=f;
siz[p]=1;
for(ri i=hd[p];i;i=e[i].nxt)
if(e[i].to!=f){
dfs1(e[i].to,p);
siz[p]+=siz[e[i].to];
if(siz[e[i].to]>siz[son[p]])son[p]=e[i].to;
}
}
void dfs2(int p,int k){
top[p]=k;
if(son[p]){
dfs2(son[p],k);
for(ri i=hd[p];i;i=e[i].nxt)
if(!top[e[i].to])
dfs2(e[i].to,e[i].to);
}
}
inline int lca(int x,int y){
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]])swap(x,y);
x=fa[top[x]];
}
return dep[x]<dep[y]?x:y;
}
ll ans[maxn];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
len=0;
memset(hd,0,sizeof hd);
memset(son,0,sizeof son);
memset(top,0,sizeof top);
for(ri i=1,x,y;i<n;++i){
scanf("%d%d",&x,&y),++x,++y;
addedge(x,y),addedge(y,x);
}
dfs1(1,0);
dfs2(1,1);
memset(ans,0,sizeof ans);
ll sum=1;
for(ri i=hd[1];i;i=e[i].nxt)ans[1]+=siz[e[i].to]*sum,sum+=siz[e[i].to];
printf("%lld",1ll*n*(n-1)/2-ans[1]);
ri l=1,r=1,sl,sr;
for(ri i=2;i<=n;++i){
ri a=lca(i,l),b=lca(i,r);
if(a==l&&b==1){
if(l==1){
sl=siz[i];
for(ri j=i;fa[j]>1;j=fa[j],sl=siz[j]);
}
l=i;
}
else if(b==r&&a==1){
if(r==1){
sr=siz[i];
for(ri j=i;fa[j]>1;j=fa[j],sr=siz[j]);
}
r=i;
}
else if(a!=i&&b!=i)break;
if(l==1)ans[i]=siz[r]*(n-sr);
else if(r==1)ans[i]=siz[l]*(n-sl);
else ans[i]=siz[l]*siz[r];
}
for(ri i=2;i<=n+1;++i)printf(" %lld",ans[i-1]-ans[i]);
printf("\n");
}
return 0;
}
边栏推荐
- Phasecraft连下两城,助力英国量子技术商业化加速!
- SLAM 04.视觉里程计-1-相机模型
- MySQL【窗口函数】【共用表表达式】
- nVisual secondary development - Chapter 2 nVisual API operation guide Swagger use
- odoo15 大部分模块都用的附件整理成一独立模块
- idea removes spark logs
- F.金玉其外矩阵(构造)
- odoo13 note point
- vcl啥意思_oval
- Chinese valentine's day, of course, to learn SQL optimization better leave work early to find objects
猜你喜欢

Problem solving-->Online OJ (18)

节省50%成本!京东云重磅发布新一代混合CDN产品

Almost all known protein structures in the world are open sourced by DeepMind
将 Sentinel 熔断限流规则持久化到 Nacos 配置中心

idea removes spark logs

基于 Next.js实现在线Excel

leetcode 48. Rotate Image (Medium)

Kyushu Cloud attended the Navigator Online Forum to discuss the current status, challenges and future of 5G MEC edge computing

《C 陷阱与缺陷 》阅读概要

考研上岸又转行软件测试,从5k到13k完美逆袭,杭州校区小哥哥拒绝平庸终圆梦!
随机推荐
Redis 复习计划 - Redis主从数据一致性和哨兵机制
Install mysql on k8s
Set partition minimum difference problem (01 knapsack)
记录都有哪些_js常用方法总结
Phasecraft连下两城,助力英国量子技术商业化加速!
文盘Rust -- 配置文件解析
【硬件架构的艺术】学习笔记(1)亚稳态的世界
Centos7 install mysql version rapidly
让Web页面中的编辑器支持黏贴或直接拖拽来添加图片「建议收藏」
《C 陷阱与缺陷 》阅读概要
Win11快速助手在哪里?Win11打开快速助手的方法
如何在ubuntu环境下安装postgresql并配置远程访问
[Niu Ke brush questions-SQL big factory interview questions] NO5. Analysis of a treasure store (e-commerce model)
中大型商业银行堡垒机升级改造就用行云管家!必看!
并发刺客(False Sharing)——并发程序的隐藏杀手
odoo15 大部分模块都用的附件整理成一独立模块
State security organs conduct criminal arrest and summons review on Yang Zhiyuan, a suspect suspected of endangering national security
卷积神经网络 基础
Makefile 语法及使用笔记
Lixia Action | Kyushu Yunzhang Jinnan: Open source is not a movement for a few people, popularization is the source