Imbalance

news/2025/11/13 19:08:40/文章来源:https://www.cnblogs.com/MyShiroko/p/19219281

Background

Special for beginners, _

Description

上周 DB(Dream Bear) 做了均衡区间,但是它没过。

于是 DB 急了,就打算出一道 《非均衡区间》,但是求非均衡区间只要 \(n^2 − ans\) (均衡区间数) 即可。

出了一个原题, DB 更急了,于是 DB 就打算做完全非均衡区间。DB 一下子就想出了完全非均衡区间的解法,并开始嘲讽你。

但是你比 DB 强多了,所以你不用做完全非均衡区间,你直接做完全非均衡路径,直接薄纱 DB。

如果树上一条简单路径满足:路径上点权最大值和最小值都在路径的端点上,并且路径的两个端点不相同;那么称之为完全非均衡路径。

给定一棵树,点权就是点的编号(是 \(1\)\(n\) 的排列)。

求这颗树上的完全非均衡路径数量。

Format

Input

第一行 \(n\) 表示点数。

接下来 \(n−1\) 行,每行两个整数 \(u,v\) 表示一条边 \((u,v)\)

Output

一行一个整数表示答案。

Samples

输入数据 1

3  
1 2
2 3

输出数据 1

3

其他样例见下发文件。

Limitation

无捆绑测试

对于所有数据,\(1 \le n \le 5 \times 10 ^ 5\)

淀粉质 + 二维偏序

考虑到是不简单树上路径问题。所以直接上淀粉质。

对目前所处点的所有子树跑一遍根链最值(将淀粉质所处点当做根)。

然后发现每个点有一个二元组 \((x,y)\)

对于一条合法的路径,要考虑合法条件为两个二元组满足

\(x_1 < x_2\) && \(y1 < y2\)

但是这样会算上两端点都在同一子树(根链)上的路径。

所以要容斥一下,之后就做完了。

终于调出来一道 淀粉质 & CDQ。

不容易啊qwq。

#include <stdio.h>
#include <string.h>
#include <bitset>
#include <algorithm>
#define lowbit(x) (x & (-x))
#define con putchar_unlocked(' ')
#define ent putchar_unlocked('\n')
#define add(u,v) to[++ tot] = v,nxt[tot] = h[u],h[u] = tot
#define int long long 
#define Blue_Archive return 0
using namespace std;
constexpr int N = 5e5 + 3;
constexpr int M = 1e6 + 3;
constexpr int INF = 2e9;int T;
int n;
int rt;
int tot;
int ans;
int sum;
int top1;
int top2;
int h[N];
int to[M];
int mx[N];
int tr[N];
int siz[N];
int nxt[M];bitset<N> vis;struct miku
{int mx,mn;friend bool operator < (miku a,miku b){return a.mx == b.mx ? a.mn > b.mn : a.mx < b.mx;}
}lmx[N],lmn[N];inline int read()
{int x = 0;int c = getchar_unlocked();while(c < '0' || c > '9') c = getchar_unlocked();while(c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48),c = getchar_unlocked();return x;
}inline void write(int x)
{if(x < 0) x = -x,putchar_unlocked('-');if(x > 9) write(x / 10);putchar_unlocked(x % 10 + '0');
}inline int max(int x,int y){return x > y ? x : y;}
inline int min(int x,int y){return x < y ? x : y;}inline void ins(int pos,int val){for(int i = pos;i <= n;i += lowbit(i)) tr[i] += val;}inline int query(int pos){int res = 0;for(int i = pos;i;i -= lowbit(i)) res += tr[i];return res;}inline void get(int x,int f)
{siz[x] = 1;mx[x] = 0;for(int i = h[x];i;i = nxt[i]){if(to[i] == f || vis[to[i]]) continue;get(to[i],x);siz[x] += siz[to[i]];mx[x] = max(mx[x],siz[to[i]]);}mx[x] = max(mx[x],sum - siz[x]);if(mx[x] < mx[rt]) rt = x;
}inline void dfs1(int x,int f,int rt,int mxx,int mnn)
{if(x > mxx){lmx[++ top1] = miku{mxx = x,mnn};ans += (mnn == rt);}if(x < mnn){lmn[++ top2] = miku{mxx,mnn = x};ans += (mxx == rt);}for(int i = h[x];i;i = nxt[i]) if(!vis[to[i]] && to[i] != f) dfs1(to[i],x,rt,mxx,mnn);
}inline void dfs2(int x,int f,int rt,int mxx,int mnn)
{if(x > mxx) lmx[++ top1] = miku{mxx = x,mnn};if(x < mnn) lmn[++ top2] = miku{mxx,mnn = x};for(int i = h[x];i;i = nxt[i]) if(!vis[to[i]] && to[i] != f) dfs2(to[i],x,rt,mxx,mnn);
}inline void dfz(int x) // 淀粉质
{vis[x] = 1;top1 = top2 = 0;for(int i = h[x];i;i = nxt[i]) if(!vis[to[i]]) dfs1(to[i],x,x,x,x);sort(lmx + 1,lmx + top1 + 1);sort(lmn + 1,lmn + top2 + 1);int itl = 1,itr = 1;while(itl <= top1 && itr <= top2) // 端点在其子树的两条链上的合法四元组个数(直接上二维偏序){if(lmn[itr].mx < lmx[itl].mx) ins(lmn[itr ++].mn,1);else ans += query(lmx[itl ++].mn - 1);}while(itl <= top1){if(lmx[itl].mn > 1) ans += query(lmx[itl].mn - 1);itl ++;} while(-- itr) ins(lmn[itr].mn,-1);for(int i = h[x];i;i = nxt[i]) // 容斥子树的贡献{if(vis[to[i]]) continue;top1 = top2 = 0;dfs2(to[i],x,x,x,x);sort(lmx + 1,lmx + top1 + 1);sort(lmn + 1,lmn + top2 + 1);int itl = 1,itr = 1;while(itl <= top1 && itr <= top2) // 端点在其子树的两条链上的合法四元组个数(直接上二维偏序){if(lmn[itr].mx < lmx[itl].mx) ins(lmn[itr ++].mn,1);else ans -= query(lmx[itl ++].mn - 1);}while(itl <= top1){if(lmx[itl].mn > 1) ans -= query(lmx[itl].mn - 1);itl ++;} while(-- itr) ins(lmn[itr].mn,-1);}for(int i = h[x];i;i = nxt[i]){if(vis[to[i]]) continue;sum = siz[to[i]];mx[rt = 0] = INF;get(to[i],x);get(rt,0);dfz(rt);}vis[x] = 0;
}inline void solve()
{n = read();for(int i = 1,u,v;i < n;i ++){u = read();v = read();add(u,v);add(v,u);}mx[rt = 0] = INF;sum = n;get(1,0);get(rt,0);dfz(rt);write(ans);ent;
}signed main()
{freopen("imbalance.in","r",stdin);freopen("imbalance.out","w",stdout);// freopen("data.in","r",stdin);freopen("data.out","w",stdout);solve();Blue_Archive;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月展厅设计公司权威推荐榜:企业展厅、校史馆、博物馆、多媒体数字及VR线上虚拟展厅设计厂家精选

2025 年 11 月展厅设计公司权威推荐榜:企业展厅、校史馆、博物馆、多媒体数字及VR线上虚拟展厅设计厂家精选 随着数字化浪潮的深入推进,展厅设计行业正经历着前所未有的变革。从传统的实体展馆到如今的多媒体数字展厅…

点赞!开幕式背后的云力量!

粤港澳大湾区华光璀璨 “同心圆”水舞台如梦似幻 三地健儿齐聚 激情与梦想在此交汇 11月9日,广州奥体中心 第十五届全国运动会 盛大开幕这是一场展现 “科技、绿色、融合、人文”的 体育盛会 中国电信天翼云 作为十五…

#20232329 2025-2026-1 《网络与系统攻防技术》 实验六实验报告

#20232329 2025-2026-1 《网络与系统攻防技术》 实验六实验报告Metasploit攻击渗透实践 1.实验内容 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 (2)Vsftpd源码包后门漏洞(21端口) (3)SambaM…

易路AI人才罗盘:点亮组织内部的人才“星空”,让每一次人才决策都精准有据

引言:HR的世纪难题——“我们的人才究竟在哪里?” 当业务部门火急火燎地提出需求:“我们需要一位情商高、能团结队伍、激发团队斗志的HRBP负责人”,或者当公司战略决定“明年在德国建立营销中心,谁适合做第一任一…

11.13 比赛总结

比赛情况 今天又双叒叕犯了低级失误,\(A\) 题有个地方忘记取模爆int了,\(C\) 题数组开小了。

壅土(拼音:yōng tǔ)

壅土(拼音:yōng tǔ)是一个多义词,主要包含以下三层含义: 1. 堆积的泥土指长期积聚形成的泥土堆。例句:唐柳宗元《兴州江运记》:"于是决去壅土,疏导江涛。" 2. 农业培土技术(最常见用法)在农作物…

P14463 【MX-S10-T4】『FeOI-4』呼吸之野

P14463 【MX-S10-T4】『FeOI-4』呼吸之野 P14463 【MX-S10-T4】『FeOI-4』呼吸之野 - 洛谷 (luogu.com.cn) Solution 大战此题 6h。 判定中位数 \(\ge x\) 有经典套路:把 \(\ge x\) 的位置看作 \(1\),\(<x\) 的位…

业务用例的四个核心要素 - f

一、四个核心要素完整拆解 1. 系统边界(已明确)定义:划分“采购系统”与外部环境的范围,明确哪些功能属于系统内、哪些是外部交互对象。 示例:采购系统内部包含库存检查、订单生成、库存更新功能;外部是供应商、…

20232322 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一.实验内容DNS与IP信息搜集分析; 从微信中获取好友IP地址与地理位置; 通过nmap和Nessus对靶机环境扫描探测、漏洞评估与攻击路径分析; 搜索个人网上足迹与高级搜索技能实践。二.实验目的 学习一系列安全工具和技术…

网易梦幻事业部游戏测试开发外包面经(一面)

写在前面 同一天下午连续面试两场,问题有可能与乐易一面记混 时间顺序上,本次面试为当前招聘季第四家公司,共第6次面试。 面试平台在网易自己的会议中,通过面试链接在浏览器进行,界面类似腾讯会议,代码环节是内置…

win7 如何运行cherry studio

win7 如何运行cherry studio安装vxkex扩展内核:版本:KexSetup_Release_1_1_3_1545.exe

《密码系统设计》第十一周预习

20231313 张景云《密码系统设计》第十一周预习AI对内容的总结Headfirst C 一、核心概念网络通信基础:网络程序由服务器和客户端组成,通过“协议”(结构化对话规则)实现数据交互,如自定义的IKKP协议、通用的HTTP协…

深入解析:Flink 状态和 CheckPoint 的区别和联系(附源码)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

抚州0.5mm镜面铝板无压痕模厂家优选,品质稳定采购无忧

近年来,国内模切材料市场持续波动,尤其在高端精密刀模领域,受原材料价格、加工工艺及区域供需关系等多重因素影响,终端产品价格呈现出明显的周期性变化。以0.5mm镜面铝板无压痕模为例,2024年第四季度至2025年第三…

松原西林瓶灌装加塞机推荐,适配冻干机半加塞功能

近年来,随着生物医药产业在东北地区的加速布局,松原市及周边区域对高精度、高洁净度灌装设备的需求持续增长。尤其在冻干制剂领域,适配冻干机的西林瓶灌装加塞机成为众多药企技术升级的关键设备。该类设备需具备半加…

XCPC 竞赛 Ubuntu 环境 DOMjudge Server 完整配置指南

XCPC 竞赛 Ubuntu 环境 DOMjudge Server 完整配置指南一、前言:什么是DOMjudge ? DOMjudge 是一款专为 XCPC(国际大学生程序设计竞赛) 设计的开源裁判系统,核心作用包括: 1.自动接收参赛队伍的代码提交,支持 C+…