当前位置: 首页 > news >正文

打卡信奥刷题(3194)用C++实现信奥题 P8097 [USACO22JAN] Farm Updates G

P8097 [USACO22JAN] Farm Updates G

题目描述

Farmer John 经营着总共NNN个农场(1≤N≤1051\le N\le 10^51N105),编号为1…N1\ldots N1N。最初,这些农场之间没有道路连接,并且每个农场都在活跃地生产牛奶。

由于经济的动态性,Farmer John 需要根据QQQ次更新操作(0≤Q≤2⋅1050\le Q\le 2\cdot 10^50Q2105)对他的农场进行改造。更新操作有三种可能的形式:

  • (D x)停用一个活跃的农场xxx,使其不再生产牛奶。

  • (A x y)在两个活跃的农场xxxyyy之间添加一条道路。

  • (R e)删除之前添加的第eee条道路(e=1e = 1e=1是添加的第一条道路)。

一个农场xxx如果正在活跃地生产牛奶,或者可以通过一系列道路到达另一个活跃的农场,则称之为一个「有关的」农场。对于每个农场xxx,计算最大的iii0≤i≤Q0\le i\le Q0iQ),使得农场xxx在第iii次更新后是有关的。

输入格式

输入的第一行包含NNNQQQ。以下QQQ行每行包含如下格式之一的一次更新操作:

D x A x y R e

输入保证对于 R 类更新,eee不超过已经添加的道路的数量,并且没有两次 R 类更新具有相等的eee值。

输出格式

输出NNN行,每行包含一个0…Q0\ldots Q0Q范围内的整数。

输入输出样例 #1

输入 #1

5 9 A 1 2 A 2 3 D 1 D 3 A 2 4 D 2 R 2 R 1 R 3

输出 #1

7 8 6 9 9

说明/提示

【样例解释】

在这个例子中,道路以顺序(2,3),(1,2),(2,4)(2,3), (1,2), (2,4)(2,3),(1,2),(2,4)被删除。

  • 农场111在道路(1,2)(1,2)(1,2)被删除之前是有关的。

  • 农场222在道路(2,4)(2,4)(2,4)被删除之前是有关的。

  • 农场333在道路(2,3)(2,3)(2,3)被删除之前是有关的。

  • 农场444555在所有更新结束后仍然是活跃的。所以它们一直保持为有关的,两者的输出均应为QQQ

【数据范围】

  • 测试点 2-5 满足N≤103N\le 10^3N103Q≤2⋅103Q\le 2\cdot 10^3Q2103

  • 测试点 6-20 没有额外限制。

C++实现

#include<cstdio>#include<vector>#include<cstdlib>constintN=2e5+10;intf[N];std::vector<int>vec[N];structquery{intop,x;}q[N];intans[N],vis[N];structedge{intx,y;}e[N];inttp,del[N];intgetf(intx){returnx==f[x]?x:f[x]=getf(f[x]);}inlinevoidlink(intu,intv,intnow){u=getf(u),v=getf(v);if(u==v)return;if((!vis[u])^(!vis[v])){if(!vis[u])for(autox:vec[u])vis[x]=now;elsefor(autox:vec[v])vis[x]=now;}if(vec[u].size()>vec[v].size()){f[v]=u;for(autox:vec[v])vec[u].push_back(x);}else{f[u]=v;for(autox:vec[u])vec[v].push_back(x);}}intmain(){charop[5];intx,y,n,Q;scanf("%d%d",&n,&Q);for(inti=1;i<=n;++i)f[i]=i,vis[i]=Q,vec[i].push_back(i);for(inti=1;i<=Q;++i){scanf("%s",op);if(op[0]=='A')scanf("%d%d",&x,&y),e[++tp].x=x,e[tp].y=y;elsescanf("%d",&x),q[i].op=op[0]=='D'?1:2,q[i].x=x;}for(inti=1;i<=Q;++i)if(q[i].op==1)vis[q[i].x]=0;elsedel[q[i].x]=1;for(inti=1;i<=tp;++i)if(!del[i])link(e[i].x,e[i].y,Q);for(inti=Q;i>=1;--i){if(!q[i].op)continue;if(q[i].op==1){intu=getf(q[i].x);if(!vis[u])for(autox:vec[u])vis[x]=i-1;}elselink(e[q[i].x].x,e[q[i].x].y,i-1);}for(inti=1;i<=n;++i)printf("%d\n",vis[i]);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/734502/

相关文章:

  • 四月AI战局终章:混元登顶、DeepSeek降价、国家队进场
  • 从编码器到安全停车:一文讲透伺服电机那些关键的‘保命’功能(STO/SOS/SLS)
  • ESP32串口开发避坑指南:为什么你的UART1回环测试总失败?盘点5个常见配置误区
  • # 「找-发-审」的六道现实门槛:AI编程工程化落地的诚实审视
  • 淘宝/亚马逊卖家必备:一键图片翻译多种语言,保留原排版
  • 从接入到稳定运行 Taotoken 服务的过程与初步印象
  • OPC入门指南:一人公司概念,常用工具与注意事项全解析
  • linux内核网络协议栈分层及各层之间的传递解析
  • 如何用FlyOOBE终极方案突破Windows 11硬件限制:完整系统定制指南
  • AutoSubs终极指南:3分钟掌握本地AI字幕生成,视频制作效率提升300%
  • Spring AI 代理模式 Spring AI Agentic Patterns —— Spring AI (Part 1): Agent Skills
  • B站缓存视频转换完整指南:3分钟学会m4s无损转MP4
  • BilibiliDown音频提取技术方案:专业级无损音乐下载与批量处理实战
  • 5分钟本地化视频字幕提取:87种语言支持,完全免费的专业级解决方案
  • YOLOv13涨点改进| AAAI 2026 | 独家创新首发、Conv卷积改进篇 |引入SAMC结构感知多上下文模块,通过结构和语义特征的融合、多尺度学习,助力目标检测,图像分割,图像增强,涨点通用
  • Inkscape光线追踪插件终极指南:5分钟学会专业光路图绘制
  • Laravel 12升级后AI中间件突然失效?——深度解析HTTP/3兼容性断点、PSR-18适配器陷阱及向后兼容迁移路线图
  • Jiayan古汉语NLP工具包:解锁文言文数字化的终极解决方案
  • 体验Taotoken多模型聚合在应对单一服务波动时的路由容灾效果
  • 手把手教你用Vector Davinci配置AutoSar NVM队列与回调(附代码示例)
  • 2-4 年到 4-6 年的跃迁动作清单——抓住数据人的窗口期
  • 3分钟搭建可视化数据库:NocoDB让数据管理像Excel一样简单
  • 如何高效获取网盘直链:LinkSwift开源工具深度解析
  • wechatapi iPad协议:私域API底层优化实录
  • ROS2 Humble下用Python写Action服务,比C++简单多少?一个完整案例带你避坑
  • YOLOv13涨点改进| TGRS 2026 | 全网独家首发、Neck特征融合改进篇 | 引入CAFM跨语义自适应滤波融合模块,有效挖掘浅层特征中的细粒度信息,增强红外小目标检测涨点、抑制背景噪声
  • 打卡信奥刷题(3195)用C++实现信奥题 P8102 「LCOI2022」 Cow Insertion
  • 通过Taotoken用量看板分析并优化大模型API调用策略
  • 【Ubuntu使用BUG】解决使用 Ubuntu to go 换机后 NVIDIA 驱动失效
  • 大语言模型评估新方法TrustJudge解析与应用