【记录】「TJOI2012 + 2022」三道模拟赛/26.7.14
切蓝然后回家路上摔了一跤运气守恒P2597 [ZJOI2012] 灾难 - 洛谷 (luogu.com.cn)自己场切的第一道蓝说下思路。1.一开始想的点双联通从食物到消费者建边强行把有向图迁移成无向图求出割点后再跑一遍求子树大小调了半小时 20 分 GG。2.观察到 n 刚好是考虑带 log 的做法估计是 LCA。而 LCA 必须在树上进行题目给的图加了超级源点都不是树看来得重建一颗。3.答案应该也是子树大小树边来自于依赖关系。考虑点 x 对于点 y 的依赖即点 y 消失后点 x 就一定灭绝。当且仅当点 y 是点 x 所有食物的 LCA。4.一个个枚举点求食物 LCA 肯定不现实时间复杂度。因为原图有严格的层次关系考虑一层层拓扑当一个点的入度为 0就可以建立依赖并入队。5.最后在依赖树里求每个节点的子树大小 - 1。6.时间复杂度平均M 最大可以到。但题目说输入的文件大小不超过 1 MB1 MB 1,048,576 字节除以两个点为524,288。即 M 最大为实际上因为拓扑过程中就路径压缩M 会更小。#includebits/stdc.h using namespace std; typedef long long LL; const int N 66000; vectorint G[N], cg[N]; int f[N][25], rd[N], dep[N], bfa[N]; int LCA(int x, int y) { if ((x 0) || (y 0)) { return 0; } if (dep[x] dep[y]) { swap(x, y); } for (int i 20; i 0; i --) { if (dep[f[x][i]] dep[y]) { x f[x][i]; } } if (x y) { return x; } for (int i 20; i 0; i --) { if (f[x][i] ! f[y][i]) { x f[x][i]; y f[y][i]; } } return f[x][0]; } bool v[N]; int siz[N]; void dfst(int x) { siz[x] 1; v[x] 1; for (int y : cg[x]) { dfst(y); siz[x] siz[y]; } } queueint Q; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin n; memset(rd, 0, sizeof(rd)); for (int i 1; i n; i ) { bfa[i] i; int x; while (cin x) { if (x 0) { break; } G[x].push_back(i); rd[i] ; } } memset(dep, 0, sizeof(dep)); for (int i 0; i n; i ) { for (int j 0; j 20; j ) { f[i][j] -1; } } for (int i 1; i n; i ) if (rd[i] 0) { G[0].push_back(i); rd[i] ; } Q.push(0); while (!Q.empty()) { int x Q.front(); Q.pop(); for (int y : G[x]) if (rd[y]) { if (x 0) { f[y][0] 0; } else { if (f[y][0] -1) { f[y][0] x; } else { if (f[y][0] ! 0) { f[y][0] LCA(x, f[y][0]); } } } rd[y] --; if (rd[y] 0) { Q.push(y); cg[f[y][0]].push_back(y); dep[y] dep[f[y][0]] 1; for (int i 1; i 20; i ) { f[y][i] f[f[y][i - 1]][i - 1]; } } } } memset(v, 0, sizeof(v)); memset(siz, 0, sizeof(siz)); for (int i 1; i n; i ) if (v[i] 0) { dfst(i); } for (int i 1; i n; i ) { cout (siz[i] - 1) \n; } return 0; }P2173 [ZJOI2012] 网络 - 洛谷 (luogu.com.cn)咱也没学过动态树啊那就学把。【题解】动态树 LCT 模板没学过 Splay 人士友好-CSDN博客按颜色分搞很多 splay 即可。#includebits/stdc.h using namespace std; const int N 1e4 10; struct node { int ch[2], fa, sum, v, tag; node () { ch[0] ch[1] fa sum v tag 0; } }; #define lc(p) tr[p].ch[0] #define rc(p) tr[p].ch[1] #define fa(p) tr[p].fa #define notrt(p) ((lc(fa(p)) p) || (rc(fa(p)) p)) struct LCT { node tr[N]; void pushup(int p) { int mx tr[p].v; mx max(mx, max(tr[lc(p)].sum, tr[rc(p)].sum)); tr[p].sum mx; } void pushdown(int p) { if (tr[p].tag) { swap(lc(p), rc(p)); tr[lc(p)].tag ^ 1; tr[rc(p)].tag ^ 1; tr[p].tag 0; } } void pushall(int p) { // 下发懒标记 if (notrt(p)) { pushall(fa(p)); } pushdown(p); } void rotate(int x) { int y fa(x); int z fa(y); int k rc(y) x; if (notrt(y)) { tr[z].ch[rc(z) y] x; } fa(x) z; tr[y].ch[k] tr[x].ch[k ^ 1]; fa(tr[x].ch[k ^ 1]) y; tr[x].ch[k ^ 1] y; fa(y) x; pushup(y); pushup(x); } void splay(int x) { // 将 x 旋转至根节点 pushall(x); // 操作前先下发懒标记 while (notrt(x)) { int y fa(x), z fa(y); if (notrt(y)) { if ((rc(y) x) ^ (rc(z) y)) { rotate(x); } else { rotate(y); } } rotate(x); } } void access(int x) { for (int y 0; x; ) { splay(x); // 先使 x 伸展至根节点 rc(x) y; pushup(x); // 改了边指向后一定要更新 y x; x fa(x); } } void makert(int x) { access(x); splay(x); tr[x].tag ^ 1; } void split(int x, int y) { makert(x); access(y); splay(y); } int findrt(int x) { access(x); splay(x); while(lc(x)) { pushdown(x); x lc(x); } splay(x); return x; } void link(int x, int y) { makert(x); if (findrt(y) ! x) { fa(x) y; } } void cut(int x, int y) { makert(x); if (findrt(y) x fa(y) x !lc(y)) { fa(y) 0; pushup(x); } } void change(int x, int y) { splay(x); tr[x].v y; pushup(x); } }; LCT tr[15]; int rd[15][N]; mapint, int mp[N]; int main () { ios::sync_with_stdio(false); cin.tie(0); int n, m, C, K; cin n m C K; for (int i 1; i n; i ) { int v; cin v; for (int j 1; j C; j ) { tr[j].change(i, v); } } memset(rd, 0, sizeof(rd)); for (int i 1; i m; i ) { int x, y, w; cin x y w; w ; mp[x][y] mp[y][x] w; rd[w][x] ; rd[w][y] ; tr[w].link(x, y); } for (int i 1; i K; i ) { int opt; cin opt; if (opt 0) { int x, y; cin x y; for (int j 1; j C; j ) { tr[j].change(x, y); } } else if (opt 1) { int x, y, w; cin x y w; w ; if (!mp[x][y]) { cout No such edge.\n; } else if ((rd[w][x] 2 || rd[w][y] 2) mp[x][y] ! w) { cout Error 1.\n; } else if (tr[w].findrt(x) tr[w].findrt(y) mp[x][y] ! w) { cout Error 2.\n; } else { int last mp[x][y]; rd[last][x] --; rd[last][y] --; tr[last].cut(x, y); rd[w][x] ; rd[w][y] ; tr[w].link(x, y); mp[x][y] mp[y][x] w; cout Success. \n; } } else { int c, x, y; cin c x y; c ; if (tr[c].findrt(y) ! tr[c].findrt(x)) { cout -1\n; continue; } tr[c].split(x, y); cout tr[c].tr[y].sum \n; } } return 0; }https://www.luogu.com.cn/problem/P8329呜呜呜。【题解】P4500 [ZJOI2018] 树Mobius 反演-CSDN博客

相关新闻

维修电工取证训练营:理论与实操结合的完整指南

维修电工取证训练营:理论与实操结合的完整指南

维修电工取证训练营:从零基础到持证上岗的完整指南 作为一名电气工程师,你是否经常遇到这样的困境:明明掌握了扎实的理论知识,却在实操环节束手无策?或者面对复杂的电气设备故障时,缺乏系统化的排查思路&am…

2026/7/26 23:17:14 阅读更多 →
面试感悟----一名3年工作经验的程序员应该具备的技能

面试感悟----一名3年工作经验的程序员应该具备的技能

面试感悟——一名3年工作经验的程序员应该具备的技能 作为一名编程讲师,我经常看到学员和同行在面试中遇到各种挑战。尤其是拥有3年工作经验的程序员,这个阶段既不是初出茅庐的新人,也不是资深专家,而是一个承上启下的关键时期。面…

2026/7/26 23:17:14 阅读更多 →
Windows下MinIO对象存储部署与优化指南

Windows下MinIO对象存储部署与优化指南

1. MinIO基础概念与Windows部署准备MinIO作为一款高性能的对象存储服务,在Windows环境下的部署和使用正成为越来越多开发者的选择。不同于Linux环境,Windows平台需要特别注意运行权限和路径格式问题。我在实际企业级存储方案实施中,发现不少团…

2026/7/26 23:17:14 阅读更多 →

最新新闻

鸿蒙多功能工具箱开发实战(二十六)-无障碍访问支持

鸿蒙多功能工具箱开发实战(二十六)-无障碍访问支持

鸿蒙多功能工具箱开发实战(二十六)-无障碍访问支持 前言 无障碍访问是应用包容性的重要体现,帮助视障、听障等用户群体更好地使用应用。本文将讲解HarmonyOS无障碍功能的实现。 一、无障碍基础 1.1 无障碍属性 ArkUI组件支持以下无障碍属性:属性说明acce…

2026/7/26 23:35:37 阅读更多 →
TI ACTBP硬件设计解析:电容触摸与音频处理系统集成实战

TI ACTBP硬件设计解析:电容触摸与音频处理系统集成实战

1. 项目概述与核心价值在嵌入式系统开发,尤其是人机交互界面设计中,电容触摸技术因其直观、耐用和美观的特性,已经成为许多消费电子和工业产品的首选。然而,将高灵敏度的电容触摸与复杂的实时音频处理功能集成到一块紧凑的电路板上…

2026/7/26 23:35:37 阅读更多 →
云原生时代Linux内核优化与调优实践

云原生时代Linux内核优化与调优实践

1. 云原生时代对操作系统内核的新需求云计算技术发展到今天已经进入云原生阶段,这个转变对底层操作系统内核提出了全新的要求。传统Linux内核设计时主要面向物理服务器环境,而现代云环境需要内核具备更强的隔离性、弹性和资源调度能力。我在实际运维Kube…

2026/7/26 23:35:37 阅读更多 →
Linux网络协议栈架构与性能优化详解

Linux网络协议栈架构与性能优化详解

1. Linux网络模型概述在Linux系统中,网络通信的实现基于一套完整的网络模型架构。这套模型从底层的硬件驱动到上层的应用协议栈,构建了一个分层的网络处理体系。理解这个模型对于系统管理员、网络工程师和开发者来说都至关重要,它能帮助我们更…

2026/7/26 23:35:37 阅读更多 →
C++异常处理性能优化:栈展开机制深度解析与实战策略

C++异常处理性能优化:栈展开机制深度解析与实战策略

1. 项目概述:为什么C异常处理值得深挖?如果你写过几年C,对try、catch、throw这几个关键字肯定不陌生。教科书和入门教程告诉我们,异常是处理运行时错误的优雅方式,它能将错误处理代码与正常业务逻辑分离,让…

2026/7/26 23:35:37 阅读更多 →
解码策略的生成质量对比:贪心、束搜索与核采样的多样性控制实验

解码策略的生成质量对比:贪心、束搜索与核采样的多样性控制实验

解码策略的生成质量对比:贪心、束搜索与核采样的多样性控制实验 语言模型文本生成的质量和多样性受解码策略的直接影响。贪心解码(Greedy)追求每一步的局部最优却陷入重复循环,束搜索(Beam Search)通过维护…

2026/7/26 23:34:36 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻