cf 974 div3 D(滑动区间 动态维护 区间信息 ) E (分层图,扩点最短路) F(树dp)H(异或哈希)

D
题意:
有n天,访客逗留d 天。
有 k 项 工作,有这项 工作开始的 时间和结束的时间
问 哪一天 不同的工作数最多,那一天最多。

长度为 d 的 滑动窗口,我们记录 每一个时间点 开始的工作数量,和结束的工作数量。 加上新 加入 的点 所开始的工作,减去 离开区间的点 结束的数量。


void solve()
{int n, d, k;cin >> n >> d >> k;vector<int> a(n + 3);vector<int> b(n + 3);int x, y;while (k--){cin >> x >> y;a[x]++;b[y]++;}int mx, mn = 0;for (int i = 1; i <= d; i++){mx += a[i];}mn = mx;int ans1, ans2;ans1 = 1;ans2 = 1;int t = mx;for (int i = 2; i <= n - d + 1; i++){t -= b[i - 1];t += a[i + d - 1];if (t > mx){mx = t;ans2 = i;}if (t < mn){mn = t;ans1 = i;}}cout << ans2 << " " << ans1 << "\n";
}

E
前半边那个 在一个点汇合的有点像 百度23年的一道题
添加链接描述
两个人a b 在两个点出发,到N。a走一步体力消耗为TE,b走一步体力消耗为TF ,如果两个人汇合,那么两个人走一步的体力消耗和为TE+TF-s.问两个人到N点的最小体力消耗。
思路就是枚举汇合的地点。我们需要处理三个最短路(因为边权是固定的,所以可以用bfs)一个是a 到每个点的最短路,b 到每个店的最短路,每个点到N的最短路(其实就是N到每个点的最短路)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
int read()
{int x = 0, f = 1;char ch = getchar();while (!isdigit(ch)){if (ch == '-')f = -1;ch = getchar();}while (isdigit(ch)){x = (x << 1) + (x << 3) + ch - '0';ch = getchar();}return x * f;
}
const int N = 4e4 + 5;
vector<int> e[N];
int a[N], b[N], c[N];
void solve()
{int te, tf, s;cin >> te >> tf >> s;int t, f, n, m;cin >> t >> f >> n >> m;int u, v;while (m--){cin >> u >> v;e[u].push_back(v);e[v].push_back(u);}auto bfs = [&](int s,  int *a) -> void{for (int i=1;i<=n;i++)a[i]=2e9;queue<int> q;q.push(s);a[s]=0;while (!q.empty()){int u = q.front();q.pop();for (auto v : e[u]){// 已经遍历 这个点了if (a[v]!=2e9)continue;a[v] = a[u] + 1;q.push(v);}}};bfs(t,a);bfs(f,b);bfs(n,c);int mn=2e9;// 枚举汇合的点for (int i=1;i<=n;i++){mn=min(mn,a[i]*te+b[i]*tf+c[i]*(te+tf-s));}if (mn==2e9)cout<<-1<<"\n";else cout<<mn<<"\n";}
signed main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t;t = 1;// cin>>t;while (t--){solve();}return 0;
}

这道题 主题 的思路 和这个一样。只不过在上一道题的基础上 多了分层。
我们 可以将 所以节点 没有马的情况 看做一层图,将所有 节点 有马的情况看做一层图。
然后 对于 有马的节点
考虑拆点。我们将点 拆成点 i 和点 n+i,其中点 i 表示到i 点时没有骑马,点 i+n表示到 点时骑上了马。那么对于一个有马的点 连边 (i ,i+n ,0),对于一条边 (u , v ,w) 连边 以及 (u+n ,v+n , w/2)。然后分别 跑 Dijkstra 求单源最短路。最后枚举两人到哪个点集合,并分别枚举两人到达时是否骑马即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4e5 + 100;
vector<pair<int, int>> e[N];
struct node
{int x;int y;bool operator<(const node &a) const{return a.y < y;}
};
void solve()
{int n, m, h;cin >> n >> m >> h;for (int i = 0; i <= 2 * n; i++){e[i].clear();}for (int i = 0, u; i < h; i++){cin >> u; e[u].push_back({n+u,0});}for (int i = 0, u, v, w; i < m; i++){cin >> u >> v >> w;e[u].push_back({v, w});e[v].push_back({u, w});e[u + n].push_back({v + n, w / 2});e[v + n].push_back({u + n, w / 2});}auto dij = [&](int s, vector<int> &dis) -> void{vector<bool> vis(2 * (n + 1), false);dis[s] = 0;priority_queue<node> q;q.push({s, 0});while (!q.empty()){node t = q.top();q.pop();int u = t.x;if (vis[u])continue;vis[u] = 1;for (auto [v, w] : e[u]){if (dis[v] > dis[u] + w){dis[v] = dis[u] + w;q.push({v, dis[v]});}}}};vector<int> dis1(2 * (n + 1), 1e18);vector<int> dis2(2 * (n + 1), 1e18);dij(1, dis1);dij(n, dis2);int ans = 1e18;for (int i = 1; i <= n; i++){ans = min(ans, max(dis1[i], dis2[i]));ans = min(ans, max(dis1[i + n], dis2[i]));ans = min(ans, max(dis1[i], dis2[i + n]));ans = min(ans, max(dis1[i + n], dis2[i + n]));}if (ans == 1e18)cout << -1 << "\n";elsecout << ans << "\n";}
signed main()
{int t=1;cin>>t;while(t--){solve();}
}

F
题意:
一棵树,每次可以使 这个节点 的相邻节点都减c 使``得 将这个节点的价值 统计进答案。
求整棵树的最大价值和

显然的是可以转移的东西。通常树上的dp【i】代表 以i 为根节点 的子树 的状态。

// dp[i][1]代表 以i 为根的子树 ,根节点不取的情况下 的价值的最大值
// dp[i][0]代表 以i 为根的子树 ,根节点取的情况下 的价值的最大值

考虑一下转移
我们只需要 关注 那些选的节点的权值
dp[i] 的状态 是由 他的子节点 转移 过来的。
如果这个点统计进答案,那么和这个点相邻的点都要减去c
因为是相邻的节点 所以 转移的时候 要考虑 根节点对子节点的影响 子节点对根节点的影响
如果根节点不选的话,根节点不会对子节点造成减c的影响,子节点(不论子节点选不选) 无法 对根节点造成减c 的影响(因为 根节点的 价值不计入答案)
如果根节点选的话 ,从不选的子节点转移过来的时候,不造成影响(因为我们只关注选的节点),从选的子节点转移时,子节点对根节点 有 -c,根节点对子节点有-c ,所以要减去两个c

#include <bits/stdc++.h>
using namespace std;
#define int long long 
int read()
{int x = 0, f = 1;char ch = getchar();while (!isdigit(ch)){if (ch == '-')f = -1;ch = getchar();}while (isdigit(ch)){x = (x << 1) + (x << 3) + ch - '0';ch = getchar();}return x * f;
}const int N=2e5+5;
int dp[N][2];
// dp[i][1]代表 以i 为根的子树 ,根节点不取的情况下 的价值的最大值
// dp[i][0]代表  以i 为根的子树 ,根节点取的情况下 的价值的最大值
vector<vector<int>>e(N);void solve()
{memset(dp,sizeof(dp),0);int n,c;cin>>n>>c;vector<int>a(n+1);for (int i=1;i<=n;i++){cin>>a[i];e[i].clear();}int u,v;for (int i=1;i<=n-1;i++){cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}auto  dfs=[&](auto && self,int u,int fa)->void{dp[u][0]=0;dp[u][1]=a[u];// if (e[u].size()==0)// return ;for(auto v:e[u]){if(v==fa)continue;self(self,v,u);dp[u][0]+=max(dp[v][0],dp[v][1]);dp[u][1]+=max(dp[v][0],dp[v][1]-2*c);}   };dfs(dfs,1,-1);cout<<max(dp[1][0],dp[1][1])<<"\n";}
signed main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t;cin>>t;while (t--){solve();}return 0;
}

H
容易发现 后手 最多是平局。这就需要 这个区间内的 不同的数字 的个数 是偶数。
使用异或哈希来做。(按照我的理解 ,异或哈希 是 随机化算法和 异或和 的组合)
当然可以 直接 将 这个值域内的数 都随机化出来,构建出来hash 表。我下面的代码是 用了map 来记录是否 出现过这个数字。都可以

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{mt19937 mt(time(0));int n, q;cin >> n >> q;vector<int> a(n + 1);int t;map<int, int> mp;for (int i = 1; i <= n; i++){cin >> t;if (mp.find(t) == mp.end())mp[t] = mt();a[i] = mp[t];}for (int i = 1; i <= n; i++){a[i] = a[i] ^ a[i - 1];}int l, r;while (q--){cin >> l >> r;if ((a[r] ^ a[l - 1]) == 0){cout << "YES\n";}elsecout << "NO\n";}
}
signed main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t;cin >> t;while (t--){solve();}return 0;
}

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

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

相关文章

2024年十大热门人力资源管理系统对比与推荐

本文介绍了ZohoPeople、金蝶云、用友、北森等10款热门HRMS系统&#xff0c;包括各自特点如ZohoPeople的全球化管理、北森的全面人才管理等。建议企业先试用再决定购买&#xff0c;以找到最适合的系统。 一、Zoho People Zoho People 是一个基于云的全球化人力资源管理系统 (HR…

啤酒在文学中的浪漫形象:精酿啤酒的诗意之旅

在文学的浩瀚星空中&#xff0c;啤酒并非仅仅是醉人的琼浆&#xff0c;它更是一种情感的载体&#xff0c;一种浪漫的符号。尤其是当提及Fendi Club精酿啤酒时&#xff0c;我们仿佛能闻到那从古老酒窖中飘出的馥郁香气&#xff0c;感受到它在文字间流淌的诗意与温情。 一、啤酒…

鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发

为保护用户隐私&#xff0c;Wear Engine的API需要用户授权才可以正常访问。建议开发者在用户首次调用Wear Engine开放能力的时候执行本章节操作。 申请用户穿戴设备权限 应用拉起华为账号登录和授权界面&#xff0c;由用户授权相应的数据访问权限。用户可以自主选择授权的数据…

建筑中的文化表达与地方特色:演绎地域之魂

在浩瀚的城市风貌中&#xff0c;每一座建筑都是文化的载体&#xff0c;无声地讲述着地域的故事与精神。建筑不仅需要满足功能需求&#xff0c;更应成为文化传承与创新的舞台。本文旨在深度剖析建筑设计如何在尊重与弘扬地方文化的基础上&#xff0c;巧妙融合现代元素&#xff0…

【含文档】基于Springboot+Vue的公园管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

前端css样式设置元素的绝对定位和相对定位,要注意宽度和高度的设置

vue3子div position absolute,父div positon relative 。如果不设置子div的 width 和height,那么子div中如果数据变长,子div相对父div位置会变化。子div数据超过&#xff0c;显示... 如何实现 <template><div class"parent"><div class"child&q…

开源实战分享 | 新书:《大型语言模型实战手册》随书代码分享

《大型语言模型实战手册》(英文版)目前电子版在亚马逊有售&#xff0c;纸质版预计在2024年10月15日开售。该书通过超过275张定制插图&#xff0c;深入探索大型语言模型的世界&#xff0c;为Python开发者提供使用大型语言模型所需的实用工具和概念。 如果对于插图没有特别执念的…

商务英语口语柯桥外语学习|ass是“屁股”,save是“救”,那 save my ass是什么意思?

有些人活着&#xff0c;屁股却已经“死”了 工作工作&#xff0c;上工就“坐”&#xff0c;“久坐”几乎是无法避免的事情&#xff0c;但你知道吗&#xff0c;长期久坐可能会患上死臀综合症&#xff08;Dormant Butt Syndrome&#xff09;&#xff01; 如果你坐久了就觉得屁股痛…

PCL库简单的icp配准

#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/registration/icp.h>int main(int argc, char** argv) {// 确保提供了两个PCD文件作为输入if (argc ! 3) {PCL_ERROR("请提供两个PCD文件作为输入。\n");return (-1);}// …

Spring系列 BeanPostProcessor

文章目录 BeanPostProcessor注册时机执行时机 InstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessor 本文源码基于spring-beans-5.3.31 参考&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/factory-extension.html#beans…

C#实战|人员管理系统[1]:项目主体框架如何搭建

哈喽,你好啊,我是雷工! 有人的地方就有江湖,有江湖的地方就得用人员管理系统,今天开始练习实现一个人员管理系统。 以下为练习笔记。 01 UI层 这里使用的版本是:VS2022 创建一个Windows窗体应用程序,命名为:PeopleManger 可以添加一个通用类文件夹,集中放置通用的一些…

mybatis-plus ==> 入门教程

文章目录 为什么要学呢&#xff1f;注意事项 简单入门案例配置日志雪花算法更改 ID 的方法 CRUD插入&#xff08;不解释了&#xff0c;代码非常简单&#xff09;更新查询&#xff08;批量查询&#xff09;按条件查询分页查询删除&#xff08;批量、通过条件、逻辑删除&#xff…

AutoSar 通信服务架构,CAN通信诊断详解

文章目录 Com&#xff08;通信服务模块&#xff09;PDU的定义和结构PDU的分类IPDU Mux 模块PDU R 模块&#xff08;路由&#xff09;Bus TP 模块BUS InterfaceCanIf模块LinIf模块 发送数据示例&#xff08;CAN报文&#xff09;接收数据示例&#xff08;CAN报文&#xff09;通信…

基于SpringBoot的休闲娱乐代理售票系统设计与实现

1.1研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统&#xff0c;由从今传统的管理模式向互联网发展&#xff0c;如今开发自己的系统是理所当然的。那么开发休闲娱乐代理售票…

CSS外边距

元素的外边距&#xff08;margin&#xff09;是围绕在元素边框以外&#xff08;不包括边框&#xff09;的空白区域&#xff0c;这片区域不受 background 属性的影响&#xff0c;始终是透明的。 为元素设置外边距 默认情况下如果不设置外边距属性&#xff0c;HTML 元素就是不会…

北京中实新材料:携手知名建筑企业,共筑重大工程辉煌篇章

近年来,北京中实新材料有限责任公司(以下简称“北京中实”)凭借其卓越的产品质量、专业的技术服务和良好的市场信誉,积极参与了一系列重大工程项目的建设,与多家知名建筑企业建立了长期稳定的合作关系,共同书写了城市发展的辉煌篇章。 深耕行业,铸就品质基石 自成立以来,北京中…

悬浮提词器免费版,5款便捷软件分享推荐

在这个信息爆炸、内容为王的时代&#xff0c;无论是直播带货、视频创作还是公开演讲&#xff0c;流畅自然的表达都是吸引观众的关键。然而&#xff0c;面对镜头时忘词卡顿却成了不少人的“心头痛”。今天&#xff0c;就给大家揭秘五款完全免费的悬浮提词器软件&#xff0c;它们…

MyBatis的注入问题

对之前文章的补充&#xff1a;MyBatis中的#{}与${}注入问题----原文链接 前言&#xff1a; MyBatis是一个流行的Java持久层框架&#xff0c;用于将对象与数据库中的数据进行映射。然而&#xff0c;如果不当使用&#xff0c;MyBatis也可能受到诸如SQL注入这类的安全问题的影响。…

prometheus + alertmanager + PrometheusAlert实现告警

prometheus 收集监控数据 alertmanager 制定告警路由 PrometheusAlert 连通告警webhook 一、prometheus配置 https://prometheus.io/download/ 1.1、prometheus安装 包的下载直接wget就行,放在data目录下,解压后在prometheus目录下创建config和rule目录 配置了热重启&#…

完整网络模型训练(一)

文章目录 一、网络模型的搭建二、网络模型正确性检验三、创建网络函数 一、网络模型的搭建 以CIFAR10数据集作为训练例子 准备数据集&#xff1a; #因为CIFAR10是属于PRL的数据集&#xff0c;所以需要转化成tensor数据集 train_data torchvision.datasets.CIFAR10(root&quo…