20210908AM
预期 | 实际 | delta | |
---|---|---|---|
A | 100 | 100 | 0 |
B | 0 | 0 | 0 |
C | 100 | 90 | -10 |
D | 50 | 90 | +40 |
E | 0 | 0 | 0 |
F | 100 | 100 | 0 |
G | 100 | 100 | 0 |
H | 100 | 100 | 0 |
总计 | 550 | 580 | +30 |
A 医院设置
以每个点为根算答案取最小值,其实这题可以用换根\(dp\)到\(O(n)\),但是数据范围太小每个点一遍\(dfs\)也是够的
B 黑暗城堡
- 对于一个点x,它所有合法的父亲y都满足\(d_x=d_y+w_{x,y}\)(其中\(d_x,d_y\)是预处理的最短路),最终方案数是所有点合法父亲个数之积
- 此外,因为边权非负,有\(d_y<d_x\),则将所有点按最短路排序后,所有可能的y都会在x前处理,所以每次只需枚举x前的点
C 繁忙的都市
题干给出三个条件:
- 道路能将所有路口联通\(\rightarrow\)是一张连通图
- 道路尽量少\(\rightarrow\)是一棵树
- 边权最大值最小
所以我们目前知道的是要建一棵树使三成立
最初我看到最大值最小这个关键词想到的是二分答案,二分最大边权,用所有满足条件的边建图判断连通性
然而我们也可以从小到大枚举边,如果两端点在同一个并查集就不建,否则合并....其实就是最小生成树的板子题
D 走廊泼水节
这题妙啊
首先可以很快想到新建\(u\rightarrow v\)的边边权为树上u,v两点之间最长边边权+1,那么接下来就是如何求两点之间最长边
- 我最开始想\(dfs\)的时候处理,然而\(dfs\)只会保留这个点和它的父亲,更新不了其他点
- 接下来我又想到Floyd 但是\(O(n^3)\)根本顶不住
所以具体求两点之间的最长边是不现实的,本题其实也不需要,只需要求总数(个人认为这是这道题最重要的点) - 因此我们维护并查集和并查集的大小,像\(kruskal\)算法一样用最小生成树的边合并并查集算答案
- 然后有一个结论:新加入的一条\(u\rightarrow v\)的边会给答案做出\((size_u*size_v-1)*(w+1)\)的贡献
- 其实很好理解,两个并查集之间需要加入\(size_u*size_v-1\)条边成为一个完全图,\(\forall x\in U,\forall y\in V\),\(maxdis(x,y)=\max(maxdis_{x\rightarrow u},maxdis_{y\rightarrow v},w_{u\rightarrow v})\),因为边是按边权从小到大排序, 显然最大值就是\(w_{u\rightarrow v}\)
E 最优贸易
最开始是想用\(Tarjan\)求\(v-DCC\)缩点再\(dfs\),因为忘了\(Tarjan\)抛掉没写
考试后才知道可以直接\(dfs\),维护每个点走能到n的点能到达的点的最大售出价,最后\(ans=\max(val_i-maxv_i)\)(相当于枚举每个点购入取最大)
F 奖金
拓扑排序板子题,如果a的工资高于b就从b向a建边,所有入度为0的点都设为最小工资,如果有一条边\(u\rightarrow v\),那么将\(w_v\)赋值为\(w_u+1\)即可
考试后才想到一个问题,为什么不取max而是直接赋值?
其实也很简单,拓扑排序是用队列实现的,更高的工资会更后赋值,不取max不会影响答案的正确性
G 对称二叉树
我读懂题了但没完全读懂
除开一号节点,其他节点一定要么同为字母,要么同为#,以此判断即可
H 小球
数学题找规律
每个点被碰偶数次后向左,奇数次后向右,所以如果前面有k个球碰到了i号点,这个球会走到i*2+(k&1)号点
将编号-1(上文说的也是前面有几个球)再做观察,可以得到更好写的规律:
对于第\(i\)层转到第\(i+1\)层(令1号点为第0层),小球会从\(now\)转移到\(now*2+\)(\(k>>i\))&1的位置
于是递推,\(O(d)\)搞定,也可以稍微优化到\(O(\log n)\)
原文地址:https://www.cnblogs.com/JA2012/p/15244152.html
- Python高性能计算库——Numba
- 最新|官方发布:TensorFlow 数据集和估算器介绍
- 干货 | PyTorch相比TensorFlow,存在哪些自身优势?
- 用TensorFlow和TensorBoard从零开始构建ConvNet(CNN)
- 从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!
- TensorFlow中的那些高级API
- 特征工程之Scikit-learn
- 浅谈NumPy和Pandas库(一)
- 例解生成对抗网络
- PyTorch和Tensorflow版本更新点
- 软件随想录:代码与数据
- 从 Pipe 到 Flow
- 代码命名:僧敲月下门
- GraphQL,你准备好了么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法