数据结构专题训练及总结

本文解析了一系列数据结构与算法问题,包括子树直径、最近公共祖先等问题,并提出了使用线段树、DFS序、树链剖分等高效算法解决方法。

11.24~11.25 数据结构专题

¥&#@~ 题目 ~@#&¥
~ HDRF
~ Shortest Path Queries
~ 子树直径
~ Common Ancestor
~ Comprime Queries
~ 动态背包
~ 奇数度数图
~ Matrix Recurrence
~ Fold
~ Paper
~ Median on Binary Tree
~ Independent Events
~ Welcome to ICPCCamp 2017
~ Lowest Common Ancestor
~ Longest Path
~ LYKMUL
~ Subsequence Count


Soulution

HDRF

按照题意,肯定会先找到权值最小的节点,于是对这颗节点的子树递归处理就好了。而在对单独一个节点处理时,当删完了它以及它的子树后,有会有一个新的权值最小节点,在不断进行递归处理。由于每个节点只会被访问到一次,所以复杂度O(n*m)。只需要用dfs序维护子树中最小节点(线段树实现)就可以了 。

Shortest Path Queris

用线段树维护一个区间中中间的一列每个点到两边每个点的最短距离,然后讨论起点和终点在同、异侧,合并一下就可以了。

子树直径

讨论已知直径的两棵树和并时,若链接两棵树的边为E,则新树的直径只可能会经过E,或者就是原来的两个直径之一。而经过E时,端点又只会在原来的两个直径的四个端点中。然后就可以了。

Common Ancestor

如果一个点是(a,b)的答案,那么a,b一定在这个点两个不同的子树中。对每一个点维护一下就可以了。

Comprime Queries

这道题要考虑容斥原理,即先把x分解质因数,然后对这些因数在一定的区间内查询倍数并用容斥原理来查看有多少个数与x不互质。用整体二分一边求出答案(注意l是无意义的)
挂一篇题解 http://www.zhimengzhe.com/bianchengjiaocheng/qitabiancheng/216649.html

动态背包

用可持久化数据结构(说的好像很简单~~),放一个物品就更新答案,删一个就撤销

奇数度数图

很考思维的一道题,发现奇数个点的联通块一定不满足要求,进一步发现偶数点的联通块一定有一种情况满足要求,因此就很好做了。

第一天。完


Matrix Recurrence

很机智的用两个栈来模拟一个矩阵乘积的队列,每次加元素就在右边加,删元素就在左边删,左边为0就把右边全复制到左边,再把右边清空。右边维护总的乘积,左边对每一个维护一个乘积即可。

Fold

直接暴力模拟,用两个指针,当左边折叠部分大于右边时,翻一下就可以了。

Paper

主席树维护,整体二分。最终在统计答案时log查一下就好了。

Median on Binary Tree

将值大于和小于a-median的分别记做0和1,然后在更新a-median的时候只用log改一条链就可以了。

Independent Events

数学题呀!~还是房励行写的好 http://blog.youkuaiyun.com/OwenOwl/article/details/78634405
线段树维护

Welcome to ICPCCamp 2017

我们需要在计算一个y时使y+1不进队,才能保证不重不漏,对每个队,维护他们最高的排名,在统计答案时需要强制不取y+1,再加上空集就行了。同时删掉一个对就是单点修改。

Lowest Common Ancestor

先统计出每个点被当作LCA的次数,再用树链剖分,对每一个节点的重儿子做差分,就能很巧妙的转化问题。每次修改只用改最低点所在的链,O(log(n))。

Longest Path

用点分治的思想,将l,r的情况分为三种情况,然后发现只用考虑两种情况,正反跑两遍即可。

LYKMUL

其实就是所有的子集,每个的交*并,再求和。对每个点对算贡献,求出A,B被覆盖的次数和B被覆盖的次数就行了。

Subsequence Count

发现:
dp[i][0]=dp[i-1][0]+dp[i-1][1]+1;
dp[i][1]=dp[i-1][1];
用矩阵(1,1,1)转移dp[i][0]
(0,1,0)
(0,0,1)
用矩阵(1,0,0)转移dp[i][1]
(1,1,1)
(0,0,1)
又发现区间去反只需要再区间左右端点分别乘一个(0,1,0)就可以了。
(1,0,0)
(0,0,1)

第二天。完


总结

这几天的题,虽然好像都懂了,但写起来自己却并不会写。因此我还要加深自己的代码水平。同时很多题自己不能想出正解,说明我的思维水平还不够,需要进一步强化。也要记得再复习主席树等新学的知识。

一、数据采集层:源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值