news 2026/5/1 22:56:27

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 22:54:24

AI Agent技能管理:中央仓库+符号链接实现高效部署与同步

1. 项目概述&#xff1a;一个为AI Agent技能管理而生的“中央仓库”如果你和我一样&#xff0c;同时用着Claude Code、Cursor、OpenClaw&#xff0c;甚至自己还折腾了几个不同用途的AI Agent工作区&#xff0c;那你一定懂那种“技能管理地狱”是什么感觉。今天想给“内容生成”…

作者头像 李华
网站建设 2026/5/1 22:53:25

深入Autosar Dem内核:从Debounce算法看汽车ECU的故障容错设计哲学

深入Autosar Dem内核&#xff1a;从Debounce算法看汽车ECU的故障容错设计哲学 在汽车电子系统开发中&#xff0c;一个看似简单的信号抖动处理策略背后&#xff0c;往往隐藏着整个行业对功能安全的极致追求。当我们谈论Autosar Dem模块的Debounce算法时&#xff0c;实际上是在探…

作者头像 李华
网站建设 2026/5/1 22:46:43

B4006 [GESP202406 四级] 宝箱

B4006 [GESP202406 四级] 宝箱 - 洛谷 题目背景 对应的选择、判断题&#xff1a;https://ti.luogu.com.cn/problemset/1152 题目描述 小杨发现了 n 个宝箱&#xff0c;其中第 i 个宝箱的价值是 ai​。 小杨可以选择一些宝箱放入背包并带走&#xff0c;但是小杨的背包比较特…

作者头像 李华
网站建设 2026/5/1 22:44:56

2026年十大最佳酒店预订小程序开发排行榜,解锁便捷出行新体验

导读&#xff1a;2026年酒店预订小程序开发领域正迎来技术革新与服务升级的关键阶段&#xff0c;行业从基础功能整合向智能体验与生态协同深度演进。本次评测聚焦十大主流解决方案&#xff0c;涵盖界面设计、功能创新、系统稳定性及成本效益等核心维度&#xff0c;为开发企业与…

作者头像 李华
网站建设 2026/5/1 22:40:44

手把手教你用DAVIS346事件相机复现EV-Eye眼动追踪实验(附数据集下载与代码解析)

基于DAVIS346事件相机的EV-Eye眼动追踪全流程复现指南 当眼球以700/秒的速度运动时&#xff0c;传统摄像头就像用网兜捕捉子弹——而事件相机则像用高速摄影机记录每一颗弹道的轨迹。这种生物启发的视觉传感器正在重新定义眼动追踪的技术边界。本文将带您从零开始复现EV-Eye这一…

作者头像 李华