Codeforces Round 756 (Div. 3)(E2,F)

CF 1161EEscape The Maze (hard version)(DFS)

题意
给定一个nn-1条边的树,一个人在1号点,他的朋友们在其他点,每过一秒,每个人都可以移动一步,问这个人在走到任意叶子节点的过程中是否能不被抓住,如果不能,那么找到至少需要几个朋友在树上。

思路
用*depth[i]表示点 i 的节点深度,用d[i]*表示点 i 该点距离最近的朋友的距离,因为是一棵树,因此从1号点到任意的叶子节点都只会有一条路,所以对于从1号点到任意叶子节点的路径中,如果存在 d [ i ] ≤ d e p t h [ i ] d[i] \le depth[i] d[i]depth[i],即这个人的朋友会比这个人先到达这个点,他的朋友可以在这个点拦住他,那么就说明这条路径不能走到1号点,然后我们统计一下有几条路被挡住了就行了

代码如下:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <cmath>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 2e5 + 10,INF=1e9;int x[N],d[N],depth[N];
vector<vector<int>>g(N);
int ans;void dfs(int u,int fa)
{if(u!=1)depth[u]=depth[fa]+1;for(auto j:g[u]){if(j==fa)continue;dfs(j,u);}
}
void dfs1(int u,int fa)
{if(d[u]==0)return;int t=INF;for(auto j:g[u]){if(j==fa)continue;dfs1(j,u);t=min(t,d[j]);}d[u]=t+1;
}
bool dfs2(int u,int fa)
{if(d[u]<=depth[u]){ans++;return 0;};if(g[u].size()==1&&u!=1)return 1;bool f=0;for(auto j:g[u]){if(j==fa)continue;f|=dfs2(j,u);}return f;
}
void solve()
{ans=0;int n,k;cin>>n>>k;for(int i=0;i<=n;i++)d[i]=INF,depth[i]=0,g[i].clear();for(int i=0;i<k;i++)cin>>x[i],d[x[i]]=0;for(int i=0;i<n-1;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0);//找到每个点的深度dfs1(1,0);//找到每个点距离最近的朋友的距离if(dfs2(1,0))cout<<-1<<"\n";//判断是否存在一条从1号点走到任意叶子节点的路径else cout<<ans<<"\n";
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin>>T;while(T--){solve();}return 0;
}

CF 1161FATM and Students(二分+前缀和+ST表)

题意
给定一个长度为n的序列a和一初始值ss,对于任意a[i]的范围为 ( − 1 e 9 ≤ a [ i ] ≤ 1 e 9 ) (-1e9 \le a[i] \le 1e9) (1e9a[i]1e9)要求找到一个最长的连续子序列,满足这一段连续子序列的任意前缀和的最小值大于等于-ss , 即将ss放到这一段连续子序列的最前面,对于这一段连续子序列的任意前缀和要大于等于0。问最长的子序列的长度,输出该长度的头和尾的下标

思路
首先,我们对于原序列a求一遍前缀和,前缀和中是可能出现负数的,此时枚举左边界,右边界不存在单调性,因此我们不能二分来查找右边界,这个时候我们可以用st表预处理出来任意一段前缀和中的最小值,然后我们二分的check就是固定了左边界后,此时的mid,即对于 i ∼ m i d i \sim mid imid这一段的前缀和中的最小值加上ss后是否大于等于0,此时二分的右边界就具有单调性了,这个时候就可以二分查找对于每个i的最大的右边界了,有一些细节看代码吧

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <cmath>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 2e5 + 10;ll st[N][20];
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--){ll n, ss;cin >> n >> ss;vector<ll> a(n + 1, 0), s(n + 1, 0);for (int i = 1; i <= n; i++)cin >> a[i], s[i] = s[i - 1] + a[i];for (int j = 0; j < 20; j++) // st表初始化for (int i = 1; i <= n; i++)st[i][j] = 0;for (int j = 0; j < 20; j++) // st表预处理出来任意一段前缀和的最小值for (int i = 1; i + (1 << j) - 1 <= n; i++){if (!j)st[i][j] = s[i];else st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);}int ans_len = 0, ansl = -1, ansr = -1;auto check = [&](int l, int r){int len = 0;while ((1 << len + 1) <= r - l + 1)len++;return min(st[l][len], st[r - (1 << len) + 1][len]) - s[l - 1] + ss >= 0;//注意这里任意一段的前缀和要减去1~l-1这一段然后再加上ss};for (int i = 1; i <= n; i++){int l = i, r = n;while (l < r){int mid = l + r + 1 >> 1;if (check(i, mid))l = mid;else r = mid - 1;}if (check(i, r) && r - i + 1 > ans_len){ansl = i;ansr = r;ans_len = r - i + 1;}}if (ans_len)cout << ansl << " " << ansr << "\n";elsecout << -1 << "\n";}return 0;
}

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

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

相关文章

9.SELinux

目录 1. 概述 1.1. 概念 1.2. 作用&#xff1a; 1.3. SELinux与传统的权限区别 2. SELinux工作原理 2.1. 名词解释 2.1.1. 主体&#xff08;Subject&#xff09; 2.1.2. 目标&#xff08;Object&#xff09; 2.1.3. 策略&#xff08;Policy&#xff09; 2.1.4. 安全上…

详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论&#xff1a;所谓选举的过程不是直接选出新的主节点&#xff0c;而是先在哨兵节点中选出 leader &#xff0c;再由 leader 负责后续主节点的指定。 假定当前环境&#xff1a; 三个哨兵(sentenal1, sentenal2, sentenal3)一个主节点(redis-master)两个从节点(red…

接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…

MySQL深入——17(主备延迟)

备库为什么延迟好几个小时 之前说的延迟为分钟级的&#xff0c;备库稳定之后都能追上来&#xff0c;但若备库的执行日志速度持续低于主库的生成日志速度&#xff0c;延迟就有可能变为小时级的。这就设计到了备库的并行复制能力。 InnoDB支持行锁&#xff0c;除了并发事务都更…

端到端实现高精地图重建(TopoNet解读和横评)

论文出处 [2304.05277] Graph-based Topology Reasoning for Driving Scenes (arxiv.org)https://arxiv.org/abs/2304.05277 TopoNet TopoNet的目标是从车辆上安装的多视角摄像头获取图像&#xff0c;感知实体并推理出驾驶场景的拓扑关系&#xff0c;实现端到端预测&#xf…

【自动化测试】----Java的单元测试工具Junit5

目录 支持Java的最低版本为8在pom.xml添加依赖Junit提供的注解功能 断言 Assertion类提供的一些方法测试用例执行顺序 &#xff08;为了预防测试用例执行顺序错误&#xff09;参数化 &#xff08;假设登陆操作&#xff0c;用户名和密码很多&#xff0c;尽可能通过一个测试用例…

2024/2/4

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

Java多线程--JDK5.0新增线程创建方式

文章目录 一、新增方式1&#xff1a;实现Callable接口&#xff08;1&#xff09;介绍&#xff08;2&#xff09;案例&#xff08;3&#xff09;总结对比 二、新增方式2&#xff1a;使用线程池&#xff08;1&#xff09;问题与解决思路1、现有问题2、解决思路3、好处 &#xff0…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注&#xff1a;数据库配置比较重要 先将本地的Docker启动起来&#xff0c;用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

以小猪o2o生活通v17.1为例简要分析SWOOLE加密破解,swoole_loader加密破解swoole加密逆向后的代码修复流程(个人见解高手掠过)

现在用Php加密五花八门除了组件就是混淆&#xff0c;在组件里面响当当的还属swoole&#xff0c;SWOOLEC是不错的国产加密&#xff0c;值得推荐官方宣称是永远无法破解的加密算法&#xff0c;针对swoole compiler的代码修复我谈谈我的看法&#xff0c;以小猪o2o生活通&#xff0…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…

蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的理解注释 1 题目描述 给定两个非负整数&#xff08;不含前导 00&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&a…

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象&#xff0c;该 Builder 类是独立于其他对象的 建造者模式属于创建型模式&#xff0c;它提供了一种创建对…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客&#xff0c;网上也有很多教程&#xff0c;很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

vcruntime140.dll最新的修复方法,一键修复vcruntime140.dll的手段

在这篇文章中&#xff0c;我们将深入探讨并详细介绍各种修复vcruntime140.dll文件缺失或损坏问题的方法。鉴于此类问题广泛存在并影响了众多用户&#xff0c;本文目的是向大家展示不同的修复策略&#xff0c;希望能够帮助每个人解决这些棘手的技术难题。下面一起来看看vcruntim…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

黑豹程序员-ElementPlus选择图标器

ElementPlus组件提供了很多图标svg 如何在你的系统中&#xff0c;用户可以使用呢&#xff1f; 这就是图标器&#xff0c;去调用ElementPlus的icon组件库&#xff0c;展示到页面&#xff0c;用户选择&#xff0c;返回选择的组件名称。 效果 代码 <template><el-inpu…

HarmonyOS ArkTS Button基本使用(十八)

HarmonyOS ArkTS是一种应用于鸿蒙系统的应用开发语言&#xff0c;它在TypeScript的基础上&#xff0c;扩展了声明式UI、状态管理等能力。在HarmonyOS中&#xff0c;Button是一种常用的组件&#xff0c;用于实现页面间的跳转和交互。下面详细介绍HarmonyOS ArkTS中Button的基本使…

深度学习环境指南【1】:Nvidia 驱动

系列文章目录 文章目录 系列文章目录前言选择合适的驱动可能遇到的问题安全模式下删除显卡现有的驱动删除在电脑上安装的 DDU 总结 前言 本文作为深度学习环境指南系列的第一篇文章&#xff0c;主要讲解当你第一次拿到显卡完成装机后需要做的步骤&#xff0c;或者是显卡驱动不…

如何使用GPT提问三元操作符?

英语10分钟&#xff1a; 现在chatgpt非常智能&#xff0c;使用的也越来越广泛&#xff0c;今天学习了使用chatgpt4提问时&#xff0c;应该遵循的提示原则&#xff0c;第一个原则&#xff0c;是要写清晰明确的、具体的说明&#xff0c;第二个原则是要给予模型思考的时间。可以安…