APIO 2022-2024 做题笔记

APIO 2022-2024 做题笔记

太难了。(持续更新中……

目录
  • APIO 2022-2024 做题笔记
    • [APIO2023] 赛博乐园 / cyberland
    • [APIO2024] 九月

[APIO2023] 赛博乐园 / cyberland

考虑倒过来转移,设 \(f_{u,j}\) 为从点 \(h\) 到点 \(u\),已经用了 \(j\) 次除以二了,那么接下来通过边的代价就变为了 \(\frac{w}{2^j}\),直接用 dijkstra 转移即可。

注意到 \(\frac{w}{2^j}\)\(j\) 很大的时候几乎不计,所以只计算小于等于 \(70\)\(j\) 即可。

时间复杂度 \(O(NK \log NK)\)

ケロシの代码
const int N = 1e5 + 5;
const int K = 70;
const ll LNF = 2e18;
double pw[K + 1], d[N][K + 1];
bool vis[N][K + 1];
vector<PII> e[N];
double solve(int n, int m, int k, int ed, vector<int> x, vector<int> y, vector<int> c, vector<int> a
) {chmin(k, K);REP(i, n) e[i].clear();REP(i, m) {e[x[i]].push_back({y[i], c[i]});e[y[i]].push_back({x[i], c[i]});}pw[0] = 1;FOR(i, 1, K) pw[i] = pw[i - 1] / 2;priority_queue<pair<double, PII>, vector<pair<double, PII>>, greater<pair<double, PII>>> pq;REP(i, n) FOR(j, 0, K) d[i][j] = LNF;REP(i, n) FOR(j, 0, K) vis[i][j] = 0;d[ed][0] = 0;pq.push({0, {ed, 0}});while(! pq.empty()) {auto h = SE(pq.top());pq.pop();int u, j; tie(u, j) = h;if(vis[u][j]) continue;vis[u][j] = 1;for(auto E : e[u]) {int v, w; tie(v, w) = E;if(v == ed) continue;if(j == K) {if(d[v][K] > d[u][K]) {d[v][K] = d[u][K];pq.push({d[v][K], {v, K}});}continue;}if(a[v] == 0) {if(d[v][K] > d[u][j] + w * pw[j]) {d[v][K] = d[u][j] + w * pw[j];pq.push({d[v][K], {v, K}});}continue;}if(a[v] == 2 && j < k) {if(d[v][j + 1] > d[u][j] + w * pw[j]) {d[v][j + 1] = d[u][j] + w * pw[j];pq.push({d[v][j + 1], {v, j + 1}});}}if(d[v][j] > d[u][j] + w * pw[j]) {d[v][j] = d[u][j] + w * pw[j];pq.push({d[v][j], {v, j}});}}}double ans = LNF;FOR(i, 0, K) chmin(ans, d[0][i]);if(ans > LNF / 2) return - 1;else return ans;
}

[APIO2024] 九月

考虑对于单个序列,若出现儿子在祖先后面,则可以缩掉。

再考虑多个序列,每个点肯定在一个块里面,可以继续缩。

时间复杂度 \(O(NM \log N)\)

ケロシの代码
const int N = 1e5 + 5;
vector<int> e[N];
int sz[N], dfn[N], cnt;
int lst[N];
struct SgT {int le[N << 2], ri[N << 2];int F[N << 2];void pushup(int u) {F[u] = max(F[u << 1], F[u << 1 | 1]);}void build(int u, int l, int r) {le[u] = l, ri[u] = r;if(l == r) {F[u] = 0;return;}int mid = l + r >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);pushup(u);}void modify(int u, int p, int x) {if(le[u] == ri[u]) {F[u] = x;return;}int mid = le[u] + ri[u] >> 1;if(p <= mid) modify(u << 1, p, x);else modify(u << 1 | 1, p, x);pushup(u);}int query(int u, int l, int r) {if(l <= le[u] && ri[u] <= r) {return F[u];}int mid = le[u] + ri[u] >> 1;int res = 0;if(l <= mid) chmax(res, query(u << 1, l, r));if(mid < r) chmax(res, query(u << 1 | 1, l, r));return res;}
} t;
void dfs(int u) {dfn[u] = ++ cnt;sz[u] = 1;for(int v : e[u]) {dfs(v);sz[u] += sz[v];}
}
int solve(int n, int m, vector<int> p, vector<vector<int>> S) {cnt = 0;REP(i, n) e[i].clear();FOR(i, 1, n - 1) e[p[i]].push_back(i);dfs(0);vector<PII> f;REP(i, n - 1) f.push_back({i, i});for(auto A : S) {t.build(1, 1, n);ROF(i, n - 2, 0) {int u = A[i];int val = t.query(1, dfn[u], dfn[u] + sz[u] - 1);if(val > i) f.push_back({i, val});t.modify(1, dfn[u], i);}}REP(i, m) {if(i) REP(j, n - 1) {int l = j, r = lst[S[i][j]];if(l > r) swap(l, r);f.push_back({l, r});}REP(j, n - 1) lst[S[i][j]] = j;}sort(ALL(f));int ans = 0;int r = - 1;for(auto h : f) {if(FI(h) <= r) chmax(r, SE(h));else ans ++, r = SE(h);}return ans;
}

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

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

相关文章

java的基础之标识符

标识符的注意点:关键字:数据类型:

智能增长引擎:纷享销客ShareAI产品白皮书(2025版)正式发布!

作为中国SaaS CRM领域连续五年稳居增速市场第一的国产CRM领先品牌,纷享销客一直在探索AI+CRM领域的数字化变革。 2024年7月,纷享AI正式发布,开启智能CRM新纪元。同年,纷享销客《AI+CRM,赋能企业高质量增长橙皮书》重磅推出,首次站在全行业视角,阐述了AI+CRM的建设策略、…

phos 的 checkpoint

我们继续追踪 pos_cli --dump --dir /root/ckpt --pid [your program pid] 的checkpoint阶段 phos的checkpoint在handle_dump函数(pos/cli/src/dump.cpp)中实现 函数开始阶段定义各种变量和初始化我们先来看--pid 在识别到clio.action_type == kPOS_CliMeta_Pid后,我们来到规则…

数据库原理复习

自用数据库原理复习数据库复习 第一章 数据库发展史 1、数据管理技术的发展(特点) 人工管理阶段,文件系统阶段,数据库技术,文件系统的缺陷(数据冗余性,数据不一致性、数据联系弱) 2、数据库技术的产生 进入数据库阶段的标志是20世纪60年代末的三件大事 1968年IBM公司研…

碰撞检测

碰撞产生的必要条件是两个物体都有碰撞器(Collider),至少一个物体有刚体(rigidbody) 有了刚体才会模拟受到力的作用 Mass - 质量 默认为千克 Drag - 阻力 0表示没有阻力 Angular Drag - 扭矩阻力 阻碍旋转的阻力 0表示没有阻力 Is Kinematic - 如果启动此选项,则对象将不会被…

未通过针对firfox的验证,现已被禁用

相信大家很多都碰到过这种问题,我也是网上找了很多方法,都不是很好用,最后破罐子破摔结果就解决了怎么解决呢,直接更新好吧,直接更新最新版本更新完了之后你就会发现解决了,一切都解决了 当然这里只是给大家提供一种思路,虽然网上很多都是复制粘贴,但是特定情况下肯定也…

PCB不同层级的功能和作用

PCB不同层级的功能和作用 示意图:以AltiumDesign为例,各层用途Gerber文件和Altium Design PCB 层级对应关系嘉立创生成geber文件对应功能 生成后的Gerber文件是一个压缩包,解压后文件如下:文件名 类型 备注/说明Gerber_BoardOutline.GKO 边框文件 PCB板厂根据该文件进行切割…

nginx 简单实践:负载均衡【nginx 实践系列之四】

本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考。〇、前言 本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考。 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://www.cnblogs.com/hnzhengfy/p/Nginx.html …

EFcore 实现带UI的自定义日志记录提供程序

基于 EFcore 实现了一个 .net core 日志记录程序,支持使用 .net 原生的日志框架 Microsoft.Extensions.Logging 将应用程序日志写入关系型数据库,目前支持三种关系型数据库(MS SQL Server、MySQL、PostgreSQL)。日志查看面板 UI 使用 vue3 开发,以嵌入的方式集成到程序集中…

ASE50N30-ASEMI智能家居专用ASE50N30

ASE50N30-ASEMI智能家居专用ASE50N30编辑:ll ASE50N30-ASEMI智能家居专用ASE50N30 型号:ASE50N30 品牌:ASEMI 封装:TO-247 批号:最新 最大漏源电流:50A 漏源击穿电压:300V RDS(ON)Max:68mΩ 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道MO…

wr30u 救砖

变砖了 给 wr30u 刷成了 at3000 的uboot,进而导致我的wr30u路由器成了转,进不去uboot了! 准备硬件 usb转串口设备 购买 usb转串口(ttl)设备,在淘宝随便买就行 没啥差别,几块钱一个:目前流行ch340系列的,推荐 ch340g 即可, 功能更强大也贵杜邦线 一般 你在购买 usb转串口…