noip 2025.2.22

T3

题目大意:

给你一棵树和一个排列 \(p\),定义 \(l \sim r\)\(val\) 值为 \(dep_{LCA(p_{l \sim r})}\),求

\[\sum_{i = 1}^n \sum_{j=i}^n val_{l, r} \]

\(n \le 6 \times 10^5\)

赛时思路:

先将 p 给直接映射上去。
考虑 \(\text{dsu on tree}\),用 set 维护每个子树中一整段的标号,暴力合并。
时间复杂度:\(O(n \log^2n)\),常数太大,无法通过。

solution A:

和 NOIP2024 T4 一样的结论。
考虑 \(dep_{LCA(l \sim r)}\) 能变成什么。
通过简单证明/虚树建树可知,他等于

\[\min_{k = l}^{r-1} dep_{LCA(l, l + 1)} \]

就是当一个点是 \(LCA\) 时,一定至少有两个儿子子树内包含这个区间的点,类似这样:

并且显然有

\[dep_{LCA(l,r)} \ge dep_{LCA(l \sim r + 1)} \]

就能得到这个结论。
那么求出相邻两个点的 \(LCA\),就能变成求:

\[\sum_{i=1}^{n-1} \sum_{j = i}^{n-1} min_{k = i}^j dep_{LCA_{k,k+1}} \]

那么拿笛卡尔树做一下即可。

solution B:

还是 \(\text{dsu on tree}\),但这次是拿并查集。
顺序是先递归轻儿子,然后清空轻儿子的修改,再次递归重儿子,将结果保留。
所以也是 \(O(n \log^2 n)\) 的,但是常数很小。
也可以优化成 \(O(n \log n \ \alpha n)\) 的。
挺套路的,不过也挺快的。

T4:

题目大意:

给定一张无向图,每条边有断开的概率,问期望的连通块个数。
\(n \le 17\)
空间 256MB,开不下 \(3^n\) 的数组。

赛时思路:

\(f_{S}\) 表示集合 \(S\) 中期望联通块个数。
然后转移就是枚举一个联通块,为了避免算重,强定他包含 \(lowbit(S)\)
直接转移不了。

然后再设 \(h_{S}\) 表示集合 \(S\) 为一个联通块的概率。
考虑容斥,用 1 减去不合法的方案。
那么枚举 \(lowbit(S)\) 所在的连通块。

发现由于 \(f,h\) 目前都无法转移,因为枚举的连通块要保证与外面的点无边。
所以设 \(g_{i, S}\) 表示 \(i\)\(S\) 中每个点都断开的概率。

那么预处理出 g,就可以 \(O(n)\) 地给 \(h,f\) 转移了。
但过不去,只能过 \(n \le 15\)

解题思路:

考虑优化转移 \(f,h\) 的时间复杂度。
由于要求的是给定两个集合 \(S,T\),求 \(S,T\) 之间无边的概率。
那么就可以抽象成这样的图:

那么设 \(dp_{S}\) 表示集合 \(S\) 内不许有边的概率。
那么上面 \(f,h\)\(O(n)\) 转移就可变成 \(O(1)\) 的。
就是 \(\frac{dp_{S|T}}{dp_{S} \times dp_{T}}\)
那么就可以 \(O(3^n)\) 了。

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

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

相关文章

Java基础day3

Scanner对象 方法的重载 方法的调用 命令行传参 可变参数 数组 类与对象 封装,继承-extendsJava基础day3 Scanner对象Scanner scanner=new Scanner(System.in);if(scanner.hasNext()){//用next接收String str=scanner.nextLine();System.out.println("输出内容…

2025-02-22-steampy-on-steam

Why 官方 插件僅做了 Chrome 版本,並且尚未上架,想給 FF 也做一個。因爲功能比較簡單,所以試圖用 Tampermonkey 做了一個版本出來,想着自己湊合中,因爲本人不需要代購價格,所以僅僅顯示 CDKey 的價格。總體樣式和官方的差距比較多,這個只是一個 Demo 腳本,後續有空了會…

[题解]AtCoder Beginner Contest 394(ABC394)

A - 22222 遍历字符串\(s\),按题意输出所有2即可。点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; string s; signed main(){cin>>s;for(auto a:s) if(a==2) cout<<a;return 0; }B - cat 按题意模拟即可。点击查看代码 …

GitOps项目上篇之Argo CD环境准备

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.GitOps概述1.什么是GitOps2.基于Argo实现GitOps方案架构二.GitOps项目环境准备实战案例1.主机角色规划2.部署gitlab相关环境3.部署k8s相关环境4.部署ArgoCD默认启用tls环境基于NodePort暴露4.1 Argo概…

[tldr] 配置windows terminal使用git bash

windows terminal默认使用power shell作为shell,但是power shell不好用,还是习惯linux的命令行行为. 参考Windows Terminal 配置 Git Bash 添加新的配置文件在windows terminal中点击设置选项点击添加配置文件按钮编辑配置内容 一个配置文件主要来自之前的配置文件的内容主要分…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 https://www.52pojie.cn/thread-2008605-1-1.html ,和我去年写的一个软件很像,当时我也是有需求,要把一个文件夹里及其子文件夹里所有的文件列出来,就临时弄了个小软件,现在我重新修复完善了一下,…

windows使用命令行管理进程

前言 在windows中,我们通常使用GUI图形画面的任务管理器来管理进程。 任务管理器提供了一个较为友好的图形界面,然而他也存在一定问题。 首先,任务管理器就要吃掉一部分性能。 而且,当你在任务管理器页面,点击按名称排序时,那可能会出现灾难性的卡顿,这对一台旧电脑来说…

postman的几种参数化

1.环境变量方式设置:创建环境:点击 Postman 右上角的 Environments > Create New。输入环境名称(如 Dev、test),并添加键值对(如 base_url: https://api.vvhan.com)。使用变量:在请求 URL 或请求体中用双花括号引用变量:{{base_url}}/users。切换环境时,变量会自动…

第十五届蓝桥杯省赛

第十五届蓝桥杯省赛 1.握手问题#include <iostream> using namespace std; int main() { //划分为43,7两组 //(43*42)/2+7*43=28*43 cout<<28*43;return 0; }2.小球反弹(难)分析: 当做两个方向往返代码:/* 考点:速度分解 分解为x轴往返,y轴往返(回到左上角起…

OpenWRT安装Caddy实现WebDAV协议的NAS盘

Caddy带有WebDAV插件,可以安装在OpenWRT上,用于提供WebDAV协议的NAS服务。 Windows资源管理器,WinSCP,MAC的Finder,Android上的CX文件管理器都可以作为WebDAV的客户端。 WebDAV使用过程中可以直接打开文件,修改后保存,非常方便,感觉Samb没区别。但其使用https协议,安全…

Java17的安装

Java17的安装因为要用SpringBoot3了,Java版本要更新到17以后 安装连接:Java Archive Downloads - Java SE 17.0.12 and earlier 下载 选择对应的版本下载安装可以更改安装位置成功以后关闭就行配置环境变量 如果电脑已经安装了JDK8,但又不想卸载的同时想安装JDK17,可以如下…

linux中nano和vim用法

Linux下nano,vim使用Linux 编辑器使用指南:nano 和 vim 在 Linux 系统中,编辑文本文件是非常常见的任务。对于大多数 Linux 用户来说,nano 和 vim 是两个最常用的命令行文本编辑器。虽然它们都可以用来编辑文件,但它们的功能和使用方式有很大不同。本篇文章将介绍这两个编辑…