【前后缀技巧】2022牛客多校3 A

news2024/11/15 18:03:10

登录—专业IT笔试面试备考平台_牛客网

题意:

思路:

这种是典中典中典,对于gcd,背包问题都是一样的处理方式

预处理出前缀lca和后缀lca,枚举哪个消失即可,可以统计方案数

Code:

#include <bits/stdc++.h>

constexpr int N = 2e5 + 10;
constexpr int mod = 1e9 + 7;
constexpr int Inf = 0x3f3f3f3f;
constexpr double eps = 1e-10;

std::vector<int> adja[N], adjb[N];

int n, k;
int x[N];
int a[N], b[N];
int pa[N], pb[N];
int depa[N], depb[N];
int Fa[N][33], Fb[N][33];
int prea[N], sufa[N], preb[N], sufb[N];

void dfs1(int u, int fa) {
    depa[u] = depa[fa] + 1;
    Fa[u][0] = fa;
    for (int j = 1; j <= 30; j ++) Fa[u][j] = Fa[Fa[u][j - 1]][j - 1];
    for (auto v : adja[u]) {
        if (v == fa) continue;
        dfs1(v, u);
    }
}
void dfs2(int u, int fa) {
    depb[u] = depb[fa] + 1;
    Fb[u][0] = fa;
    for (int j = 1; j <= 30; j ++) Fb[u][j] = Fb[Fb[u][j - 1]][j - 1];
    for (auto v : adjb[u]) {
        if (v == fa) continue;
        dfs2(v, u);
    }
}
int lca_a(int u, int v) {
    if (depa[u] < depa[v]) std::swap(u, v);
    for (int j = 30; j >= 0; j --) {
        if (depa[Fa[u][j]] >= depa[v]) {
            u = Fa[u][j];
        }
    }
    if (u == v) return u;
    for (int j = 30; j >= 0; j --) {
        if (Fa[u][j] != Fa[v][j]) {
            u = Fa[u][j];
            v = Fa[v][j];
        }
    }
    return Fa[u][0];
}
int lca_b(int u, int v) {
    if (depb[u] < depb[v]) std::swap(u, v);
    for (int j = 30; j >= 0; j --) {
        if (depb[Fb[u][j]] >= depb[v]) {
            u = Fb[u][j];
        }
    }
    if (u == v) return u;
    for (int j = 30; j >= 0; j --) {
        if (Fb[u][j] != Fb[v][j]) {
            u = Fb[u][j];
            v = Fb[v][j];
        }
    }
    return Fb[u][0];
}
void solve() {
    std::cin >> n >> k;
    for (int i = 1; i <= k; i ++) std::cin >> x[i];

    for (int i = 1; i <= n; i ++) {
        std::cin >> a[i];
    }
    for (int i = 2; i <= n; i ++) {
        std::cin >> pa[i];
        adja[pa[i]].push_back(i);
        adja[i].push_back(pa[i]);
    }
    for (int i = 1; i <= n; i ++) {
        std::cin >> b[i];
    }
    for (int i = 2; i <= n; i ++) {
        std::cin >> pb[i];
        adjb[pb[i]].push_back(i);
        adjb[i].push_back(pb[i]);
    }

    dfs1(1, 0);
    dfs2(1, 0);

    prea[1] = x[1];
    for (int i = 2; i <= k; i ++) {
        prea[i] = lca_a(prea[i - 1], x[i]);
    }
    preb[1] = x[1];
    for (int i = 2; i <= k; i ++) {
        preb[i] = lca_b(preb[i - 1], x[i]);
    }
    sufa[k] = x[k];
    for (int i = k - 1; i >= 1; i --) {
        sufa[i] = lca_a(sufa[i + 1], x[i]);
    }
    sufb[k] = x[k];
    for (int i = k - 1; i >= 1; i --) {
        sufb[i] = lca_b(sufb[i + 1], x[i]);
    }

    int ans = 0;
    int cur1 = sufa[2];
    int cur2 = sufb[2];
    if (a[cur1] > b[cur2]) ans ++;

    for (int i = 2; i <= k - 1; i ++) {
        int cur1 = lca_a(prea[i - 1], sufa[i + 1]);
        int cur2 = lca_b(preb[i - 1], sufb[i + 1]);
        if (a[cur1] > b[cur2]) ans ++;
    };

    cur1 = prea[k - 1];
    cur2 = preb[k - 1];
    if (a[cur1] > b[cur2]) ans ++;

    std::cout << ans << "\n";
}
signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int t = 1;
    while(t --) {
        solve();
    }
    return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

karmada v1.7.0安装指导

前言 安装心得 经过多种方式操作&#xff0c;发现二进制方法安装太复杂&#xff0c;证书生成及其手工操作太多了&#xff0c;没有安装成功&#xff1b;helm方式的安装&#xff0c;v1.7.0的chart包执行安装会报错&#xff0c;手工修复了报错并修改了镜像地址&#xff0c;还是各…

在Ubuntu 20.04搭建最小实验环境

sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates安装导入GPG公钥所需的依赖包。 sudo wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -导入GPG密钥。 sudo apt-get -y install --no-install-recommends software-p…

【APUE】文件系统 — 类 du 命令功能实现

一、du命令解析 Summarize disk usage of the set of FILEs, recursively for directories. du 命令用于输出文件所占用的磁盘空间 默认情况下&#xff0c;它会输出当前目录下&#xff08;包括该目录的所有子目录下&#xff09;的所有文件的大小总和&#xff0c;以 1024B 为单…

包装机(栈和队列的应用)

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道&#xff0c;放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时&#xff0c;活塞向左推动&#xff0c;将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时&#xff0c;机械手将抓取筐顶部的一件物品&#x…

论文阅读——Pyramid Grafting Network for One-Stage High Resolution Saliency Detection

目录 基本信息标题目前存在的问题改进网络结构CMGM模块解答为什么要用这两个编码器进行编码 另一个写的好的参考 基本信息 期刊CVPR年份2022论文地址https://arxiv.org/pdf/2204.05041.pdf代码地址https://github.com/iCVTEAM/PGNet 标题 金字塔嫁接网络的一级高分辨率显著性…

虚拟机通过nat模式端口映射实现内网穿透

虚拟机通过nat模式端口映射实现内网穿透 1.网络状态 windows虚拟主机的IP为局域网的私有IP192.168.1.7linux的虚拟主机IP为nat的172.36.4.1062.linux修改nat模式的端口映射 3.windows宿主机防火墙添加规则,&#xff08;或者直接关闭公共网络防火墙&#xff0c;不安全&#xf…

多个excel合并

目的&#xff1a;将同一个文件下的多个 “京东差评.xlsx” 合并为一个&#xff1a;“京东汇总.xlsx" 代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…

ffmpeg之去除视频水印

ffmpeg去除水印使用delogo视频滤镜。 delogo参数: x,y,w,h分别表示logo区域的左上角位置及宽度和高度&#xff1b; show:0表示不显示logo区域&#xff0c;1表示显示logo区域。 执行下面的命令&#xff1a; ffmpeg -i 1.mp4 -vf delogox300:y10:w80:h30:show0 out.mp4 效果…

Java数据结构————队列

一 、队列 在Java中&#xff0c;Queue是个接口&#xff0c;底层是通过链表实现的。 只允许在一端进行插入数据操作&#xff0c; 在另一端进行删除数据操作的特殊线性表&#xff0c; 队列具有先进先出FIFO(First In First Out) 。 入队列&#xff1a; 进行插入操作的一端称为…

Android 获取IP地址的Ping值 NetworkPingUtils

项目里需要对动态配置的Ip列表都去ping下延迟&#xff0c;取出其中最小的三个进行随机取值然后去连接&#xff0c;倒腾了一下午终于搞出来了&#xff01; 需求实现思路&#xff1a; 1.找到方法去ping IP地址&#xff1b; 2.同时去Ping&#xff0c;不能让用户等待&#xff1b…

游戏素材网站

OpenGameArt.org&#xff1a;这是一个提供免费游戏素材的社区平台&#xff0c;包括角色、背景、音效、音乐等各种类型的素材。你可以在 https://opengameart.org/ 上找到大量的免费资源。 Kenney.nl&#xff1a;Kenney 是一个知名的游戏开发者&#xff0c;他提供了大量的免费 …

buuctf-[BSidesCF 2020]Had a bad day

打开环境 就两个按钮&#xff0c;随便按按 url变了 还有 像文件包含&#xff0c;使用php伪协议读取一下&#xff0c;但是发现报错&#xff0c;而且有两个.php,可能是自己会加上php后缀 所以把后缀去掉 /index.php?categoryphp://filter/convert.base64-encode/resourcei…

【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

文章目录 一、一元运算符重载1、使用 成员函数 实现 前置 自增运算符重载2、使用 成员函数 实现 前置 - - 自减运算符重载 二、完整代码示例 一、一元运算符重载 1、使用 成员函数 实现 前置 自增运算符重载 使用 全局函数 实现 前置 自增运算符重载 : 首先 , 写出函数名 ,…

基于安卓android微信小程序的校园维修平台

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

MIT 6.S081学习笔记(第二章)

〇、前言 本文主要完成MIT 6.S081 实验二&#xff1a;system call 一、Using gdb (easy) Question requirements In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspe…

Qt_基础

目录 1概述1.1 什么是QT1.2 QT的发展史1.3 支持的平台1.4 QT版本1.5 下载与安装1.6 QT的优点1.7 成功案例 2 创建 Qt 项目2.1 使用向导创建2.2 .pro文件2.3 帮助文档(QTcreator自带的)2.4 QT应用程序介绍 3 创建第一个小程序3.1 按钮的创建3.1.1 设置主窗口标题的函数3.1.2 **固…

Nuget 安装程序包不成功

1、问题&#xff1a; 安装程序包时&#xff0c;点击安装总是“报错&#xff08;错误1&#xff09;”如下&#xff1a; NU1301 本地源“D:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages”不存在。 LXExamSystem.DAL C:\windowsTest\灵犀考试系统\3、源代…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

微服务技术栈-Gateway服务网关

文章目录 前言一、为什么需要网关二、Spring Cloud Gateway三、断言工厂和过滤器1.断言工厂2.过滤器3.全局过滤器4.过滤器执行顺序 四、跨域问题总结 前言 在之前的文章中我们已经介绍了微服务技术中eureka、nacos、ribbon、Feign这几个组件&#xff0c;接下来将介绍另外一个组…

Maven聚合项目配合Springcloud案例

创建maven项目 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…