NC14393 点权和(计数)

这篇博客讨论了一种点权和的问题,涉及一棵n个点的树,初始点权为0,每次选择一个点并将其相邻点权值加1。博主分析了在不超过10^5节点和10^6操作的情况下,如何避免暴力计算,使用数组维护策略,分别处理父结点和子结点的贡献,并通过`son[x]`、`father[x]`和`cnt[x]`变量进行统计。最终给出了满足模19260817条件的解决方案。
摘要由CSDN通过智能技术生成

题目链接

题意:
一 棵 n 个 点 的 树 , 最 开 始 点 权 为 0 一棵n个点的树,最开始点权为0 n0
每 次 选 一 个 点 并 且 把 和 他 距 离 为 1 的 点 的 权 值 加 一 每次选一个点并且把和他距离为1的点的权值加一 1
统 计 该 次 加 的 这 些 点 的 最 终 权 值 和 , 乘 上 次 数 的 总 和 统计该次加的这些点的最终权值和,乘上次数的总和
m o d 19260817 mod19260817 mod19260817

题解:
n < = 1 e 5 , m < = 1 e 6 n <=1e5,m<=1e6 n<=1e5,m<=1e6
数 据 较 大 , 不 能 每 次 暴 力 统 计 数据较大,不能每次暴力统计
所 以 要 用 数 组 维 护 , 分 开 处 理 所以要用数组维护,分开处理

考 虑 对 于 每 次 选 点 的 贡 献 来 源 考虑对于每次选点的贡献来源
肯 定 是 父 结 点 和 子 结 点 会 给 出 相 应 贡 献 肯定是父结点和子结点会给出相应贡献
子 结 点 和 自 身 给 的 贡 献 就 用 s o n [ x ] 维 护 子结点和自身给的贡献就用son[x]维护 son[x]
每 次 s o n [ x ] 加 上 x 点 的 度 数 , 就 是 当 次 对 x 的 贡 献 每次son[x]加上x点的度数,就是当次对x的贡献 son[x]xx
s o n [ f a [ x ] ] 加 上 2 , 该 次 操 作 对 于 父 结 点 的 贡 献 是 当 前 结 点 和 父 结 点 两 个 son[fa[x]]加上2,该次操作对于父结点的贡献是当前结点和父结点两个 son[fa[x]]2
父 亲 的 父 亲 结 点 的 s o n 数 组 加 1 , 该 次 操 作 对 父 亲 的 父 亲 结 点 的 贡 献 父亲的父亲结点的son数组加1,该次操作对父亲的父亲结点的贡献 son1
就 是 该 次 操 作 父 亲 结 点 权 值 加 一 , 会 对 父 亲 的 父 亲 结 点 产 生 贡 献 就是该次操作父亲结点权值加一,会对父亲的父亲结点产生贡献
这 样 就 考 虑 完 了 一 个 结 点 来 自 自 身 和 子 结 点 的 贡 献 了 这样就考虑完了一个结点来自自身和子结点的贡献了

然 后 考 虑 父 节 点 对 选 择 点 的 贡 献 然后考虑父节点对选择点的贡献
用 f a t h e r [ x ] 来 维 护 用father[x]来维护 father[x]
对 于 每 次 对 x 操 作 , x 和 f a [ x ] 都 会 增 加 权 值 1 并 对 他 们 的 子 结 点 产 生 贡 献 对于每次对x操作,x和fa[x]都会增加权值1并对他们的子结点产生贡献 xxfa[x]1
所 以 f a [ x ] 和 x 的 f a t h e r 数 组 都 要 加 1 所以fa[x]和x的father数组都要加1 fa[x]xfather1
但 发 现 这 样 统 计 的 父 结 点 的 贡 献 是 不 够 的 但发现这样统计的父结点的贡献是不够的
因 为 还 有 父 结 点 自 身 操 作 会 增 加 子 结 点 的 权 值 因为还有父结点自身操作会增加子结点的权值
还 有 父 亲 的 父 亲 结 点 操 作 增 加 父 亲 结 点 的 值 没 有 统 计 上 还有父亲的父亲结点操作增加父亲结点的值没有统计上
所 以 用 c n t [ x ] 维 护 x 结 点 的 操 作 数 所以用cnt[x]维护x结点的操作数 cnt[x]x
结 果 就 是 结果就是
f a t h e r [ f a [ x ] ] + s o n [ x ] + c n t [ f a [ x ] ] + c n t [ f a [ f a [ x ] ] ] father[fa[x]]+son[x]+cnt[fa[x]]+cnt[fa[fa[x]]] father[fa[x]]+son[x]+cnt[fa[x]]+cnt[fa[fa[x]]]

AC代码

/*
    Author : zzugzx
    Lang : C++
    Blog : blog.csdn.net/qq_43756519
*/
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define endl '\n'
#define SZ(x) (int)x.size()
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int mod = 19260817;
//const int mod = 998244353;
const double eps = 1e-10;
const double pi = acos(-1.0);
const int maxn = 1e6+10;
const ll inf = 0x3f3f3f3f;
const int dir[][2]={{0, 1}, {1, 0}, {0, -1}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};

ll fa[maxn], d[maxn], son[maxn], father[maxn], cnt[maxn];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
//  freopen("in.txt", "r", stdin);
//  freopen("out.txt", "w", stdout);
    int n, m;
    cin >> n >> m;
    for (int i = 2; i <= n; i++){
        int x;
        cin >> x;
        fa[i] = x;
        d[x]++; d[i]++;
    }
    ll ans = 0;
    for (int i = 1, x; i <= m; i++) {
        cin >> x;
        ++cnt[x];
        son[x] = (son[x] + d[x]) % mod;
        son[fa[x]] = (son[fa[x]] + 2) % mod;
        son[fa[fa[x]]] = (son[fa[fa[x]]] + 1) % mod;
        father[x] = (father[x] + 1) % mod;
        father[fa[x]] = (father[fa[x]] + 1) % mod;
        ans = (ans + i * (son[x] + father[fa[x]] + cnt[fa[x]] + cnt[fa[fa[x]]])) % mod;
    }
    cout << ans;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值