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

详细介绍:P14978 [USACO26JAN1] Mooclear Reactor S题解

详细介绍:P14978 [USACO26JAN1] Mooclear Reactor S题解

[USACO26JAN1] Mooclear Reactor S

思路

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

代码

压行导致代码有点猎奇。

#include<bits/stdc++.h>using namespace std;const int N=2e5+5;int t,n,m,cnt,l[N],r[N],tp[N],k[N],to[N<<1],nxt[N<<1],w[N<<1];void add(int x,int y,int z){to[++cnt]=y,w[cnt]=z,nxt[cnt]=tp[x],tp[x]=cnt;}bool bj[N],bjj[N],flag;long long b[N],val;void bfs(int x){queue<int> q;q.push(x),bj[x]=1,b[x]=0,k[x]=1,val=1000000000000000;while(!q.empty()){int x=q.front();q.pop();for(int i=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]);else if(!(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;else if(k[to[i]]+k[x]) val=(w[i]-b[x]-b[to[i]])/(k[x]+k[to[i]]);}}vector<pair<long long ,int> > sol;void dfs1(int x){long long ll=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(int i=tp[x];i;i=nxt[i]) if(!bjj[to[i]]) dfs1(to[i]);}int dfs2(int x){bjj[x]=1;long long v=k[x]*val+b[x];int siz=(v>=l[x]&&v<=r[x]);for(int i=tp[x];i;i=nxt[i]) if(!bjj[to[i]]) siz+=dfs2(to[i]);return siz;}int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>t;while(t--){cnt=flag=0;cin>>n>>m;for(int i=1;i<=n;i++) cin>>l[i];for(int i=1;i<=n;i++) cin>>r[i];while(m--){int x,y,z;cin>>x>>y>>z;add(x,y,z),add(y,x,z);}int ans=0;for(int i=1;i<=n;i++)if(!bj[i]){bfs(i);if(val==1000000000000000){dfs1(i),sort(sol.begin(),sol.end());int sum=0,max1=0;for(int j=0;j<sol.size();j++) sum+=sol[j].second,max1=max(max1,sum);ans+=max1,sol.clear();}else ans+=dfs2(i);}cout<<(flag?-1:ans)<<"\n";for(int i=1;i<=n;i++) tp[i]=bj[i]=bjj[i]=0;}return 0;}
http://www.jsqmd.com/news/391949/

相关文章:

  • 硕士论文5万字AI率太高怎么办?大论文降AI全攻略
  • 文科生论文AI率特别高?原因和解决方案都在这了
  • 2070年人口数量可能降低一半,剩下7亿人。采用AI + 机器人来应对的可能和可行性有多大?
  • 永辉超市卡快速回收:如何找到高价回收平台 - 团团收购物卡回收
  • 答辩前一天AI率还很高?紧急降AI率的3小时速成方案
  • 在AI能快速实现想法的时代,挖掘新需求成了重中之重——某知名网络启动框架需求探索
  • 混合动力汽车能量管理与ACC跟车优化控制,基于P2混合动力汽车构型,具有分层优化和融合优化两种方式
  • 全网最全10个AI论文网站测评:专科生毕业论文+开题报告写作神器推荐
  • 2026别错过!AI论文平台 千笔ai写作 VS Checkjie,MBA写论文神器!
  • 大润发购物卡回收必看指南:选择安全平台的关键技巧 - 团团收购物卡回收
  • 中国到2070年人口数量可能降低一半,剩下7亿人。解决这个问题,中国采用GenAI + 机器人来应对的可能和可行性有多大?
  • 对比一圈后! 更贴合继续教育的降AIGC平台,千笔·专业降AI率智能体 VS 万方智搜AI
  • 综述不会写?AI论文写作软件 千笔·专业学术智能体 VS 文途AI,自考必备神器!
  • 这次终于选对的一键生成论文工具,千笔·专业学术智能体 VS 锐智 AI,专为研究生打造!
  • Python 微信小程序的研究生导师日常交互师生交流,考勤打卡任务,请假
  • 吐血推荐 9个降AIGC平台:自考降AI率全测评与推荐
  • 建议收藏|更贴合本科生的降AIGC网站,千笔 VS 灵感ai
  • COMSOL中单个金纳米颗粒光热仿真的文章复现:波动光学与固体传热研究
  • 2025年仓储货架安全标准达标企业排行榜,平台货架/库房货架/中型货架/贯通货架/阁楼货架/自动化立体库/层板货架仓储货架产品怎么选 - 品牌推荐师
  • 探寻2026年网站开发领域,这些品牌实力出众,软件开发/网络公司/小程序开发/APP开发/网站开发,网站开发机构有哪些 - 品牌推荐师
  • 一篇搞定全流程 9个AI论文写作软件测评:自考毕业论文+格式规范全攻略
  • Python电动汽车充电服务APP小程序
  • 一篇搞定全流程 9个AI论文写作软件测评:本科生毕业论文+科研写作全攻略
  • Python高校社区便民报修服务系统台APP小程序
  • 吐血推荐 8个降AI率工具:MBA降AI率全测评与推荐
  • Python城市应急救援辅助系统小程序
  • 2026年市场知名的止回阀生产厂家哪家好,硬密封球阀/消声止回阀/氨用截止阀/伸缩蝶阀/水利阀门,止回阀企业推荐 - 品牌推荐师
  • 深入解析:LLM学习指南(五)——大语言模型(LLM)
  • 《 一次让你学会并掌握指针》嵌入式-C语言高级-指针(3) - 教程
  • 某机构与CMU共建AI创新中心,聚焦生成式AI与机器人