news 2026/10/29 18:59:34

P14978 [USACO26JAN1] Mooclear Reactor S题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P14978 [USACO26JAN1] Mooclear Reactor S题解

[USACO26JAN1] Mooclear Reactor S

思路

将限制建双向边,设一个联通块的根为r t rtrt,则每个a i a_iai​一定可以表示为a i = k × a r t + b a_i=k\times a_{rt}+bai​=k×art​+b,其中k ∈ { − 1 , 1 } k\in \left \{ -1,1 \right \}k∈{−1,1}。如果有环,那么每个a i a_iai​的值就确定了,检查一下有多少a i a_iai​产生动力即可。否则我们解出满足l i ≤ a i ≤ r i l_i\le a_i \le r_ili​≤ai​≤ri​的a r t a_{rt}art​取值范围。现在问题转换为:有若干线段,求一个点使包含这个点的线段数量最多。扫描线即可,时间复杂度O ( n log ⁡ n ) O(n\log_{}{n})O(nlog​n),瓶颈在于排序。

代码

压行导致代码有点猎奇。

#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;intt,n,m,cnt,l[N],r[N],tp[N],k[N],to[N<<1],nxt[N<<1],w[N<<1];voidadd(intx,inty,intz){to[++cnt]=y,w[cnt]=z,nxt[cnt]=tp[x],tp[x]=cnt;}boolbj[N],bjj[N],flag;longlongb[N],val;voidbfs(intx){queue<int>q;q.push(x),bj[x]=1,b[x]=0,k[x]=1,val=1000000000000000;while(!q.empty()){intx=q.front();q.pop();for(inti=tp[x];i;i=nxt[i])if(!bj[to[i]])b[to[i]]=w[i]-b[x],k[to[i]]=-k[x],bj[to[i]]=1,q.push(to[i]);elseif(!(k[to[i]]+k[x])&&b[to[i]]+b[x]!=w[i]||(k[to[i]]+k[x])&&(w[i]-b[x]-b[to[i]])%(k[x]+k[to[i]])||(k[to[i]]+k[x])&&val!=1000000000000000&&val!=(w[i]-b[x]-b[to[i]])/(k[x]+k[to[i]]))flag=1;elseif(k[to[i]]+k[x])val=(w[i]-b[x]-b[to[i]])/(k[x]+k[to[i]]);}}vector<pair<longlong,int>>sol;voiddfs1(intx){longlongll=k[x]==1?l[x]-b[x]:b[x]-r[x],rr=k[x]==1?r[x]-b[x]:b[x]-l[x];bjj[x]=1,sol.push_back({ll,1}),sol.push_back({rr+1,-1});for(inti=tp[x];i;i=nxt[i])if(!bjj[to[i]])dfs1(to[i]);}intdfs2(intx){bjj[x]=1;longlongv=k[x]*val+b[x];intsiz=(v>=l[x]&&v<=r[x]);for(inti=tp[x];i;i=nxt[i])if(!bjj[to[i]])siz+=dfs2(to[i]);returnsiz;}intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>t;while(t--){cnt=flag=0;cin>>n>>m;for(inti=1;i<=n;i++)cin>>l[i];for(inti=1;i<=n;i++)cin>>r[i];while(m--){intx,y,z;cin>>x>>y>>z;add(x,y,z),add(y,x,z);}intans=0;for(inti=1;i<=n;i++)if(!bj[i]){bfs(i);if(val==1000000000000000){dfs1(i),sort(sol.begin(),sol.end());intsum=0,max1=0;for(intj=0;j<sol.size();j++)sum+=sol[j].second,max1=max(max1,sum);ans+=max1,sol.clear();}elseans+=dfs2(i);}cout<<(flag?-1:ans)<<"\n";for(inti=1;i<=n;i++)tp[i]=bj[i]=bjj[i]=0;}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 19:34:47

【计算机毕业设计案例】基于springboot的智慧物联卡手机卡流量卡通讯业务办理3D可视化平台(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/10/23 14:47:38

python基于yolov5深度学习的驾驶道路损坏识别系统

前言Python基于YOLOv5深度学习的驾驶道路损坏识别系统是一种结合了深度学习目标检测技术与Python编程语言的高效道路检测解决方案。该系统利用YOLOv5算法&#xff0c;能够实时、准确地识别道路上的各种损坏类型&#xff0c;如裂缝、坑洼等&#xff0c;为道路维护和管理提供科学…

作者头像 李华
网站建设 2026/10/29 9:08:34

学长亲荐8个AI论文平台,助你轻松搞定本科论文!

学长亲荐8个AI论文平台&#xff0c;助你轻松搞定本科论文&#xff01; 论文写作的“救星”来了&#xff0c;AI 工具如何帮你轻松应对 对于很多本科生来说&#xff0c;撰写论文不仅是学术能力的考验&#xff0c;更是一场时间与精力的拉锯战。尤其是在面对重复率高、格式复杂、…

作者头像 李华
网站建设 2026/10/28 2:52:05

从注册到收益 虚拟电厂解决方案全面落地

“想参与虚拟电厂&#xff0c;但不知道如何注册&#xff1f;” “担心只有软件&#xff0c;硬件跟不上&#xff1f;” “流程复杂&#xff0c;没人指导怎么办&#xff1f;” 如果您也有这些顾虑&#xff0c;请继续往下看——我们带来了真正意义上“交钥匙”的虚拟电厂解决方案…

作者头像 李华
网站建设 2026/10/28 15:48:45

开源驱动零碳实践:MyEMS 赋能零碳工厂建设的核心路径

在 “双碳” 目标纵深推进的背景下&#xff0c;零碳工厂建设已成为工业领域绿色转型的核心载体。《关于开展零碳工厂建设工作的指导意见》&#xff08;以下简称《指导意见》&#xff09;明确提出 “坚持因业施策、创新引领、稳妥有序&#xff0c;推动绿色化与智能化深度融合” …

作者头像 李华
网站建设 2026/10/22 14:23:40

【课程设计/毕业设计】基于SpringBoot与Vue的动漫周边商场系统设计与实现基于springboot的二次元商品商城系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华