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

打卡信奥刷题(3176)用C++实现信奥题 P7991 [USACO21DEC] Connecting Two Barns S

P7991 [USACO21DEC] Connecting Two Barns S

题目描述

Farmer John 的农场由NNN块田地(1≤N≤1051 \leq N \leq 10^51N105)组成,编号为1…N1 \ldots N1N。在这些田地之间有MMM条双向道路(0≤M≤1050 \leq M \leq 10^50M105),每条道路连接两块田地。

农场有两个牛棚,一个在田地 1 中,另一个在田地NNN中。Farmer John 希望确保有一种方式可以沿着一组道路在两个牛棚之间行走。 他愿意建造至多两条新道路来实现这一目标。由于田地的位置因素,在田地iiijjj之间建造新道路的花费是(i−j)2(i-j)^2(ij)2

请帮助 Farmer John 求出使得牛棚111NNN可以相互到达所需要的最小花费。

输入格式

每个测试用例的输入包含TTT个子测试用例(1≤T≤201\le T\le 201T20),所有子测试用例必须全部回答正确才能通过整个测试用例。

输入的第一行包含TTT,之后是TTT个子测试用例。

每个子测试用例的第一行包含两个整数NNNMMM。以下MMM行,每行包含两个整数iiijjj,表示一条连接两个不同田地iiijjj的道路。输入保证任何两个田地之间至多只有一条道路,并且所有子测试用例的N+MN+MN+M之和不超过5⋅1055 \cdot 10^55105

输出格式

输出TTT行。第iii行包含一个整数,为第iii个子测试用例的最小花费。

输入输出样例 #1

输入 #1

2 5 2 1 2 4 5 5 3 1 2 2 3 4 5

输出 #1

2 1

说明/提示

【样例解释】

  • 第一个子测试用例中,最优的方式是用一条道路连接田地 2 和 3,用一条道路连接田地 3 和 4。
  • 第二个子测试用例中,最优的方式是用一条道路连接田地 3 和 4。不需要第二条道路。

【数据范围】

  • 测试点 2 满足N≤20N \le 20N20
  • 测试点 3-5 满足N≤103N \le 10^3N103
  • 测试点 6-10 没有额外限制。

C++实现

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmaxn=1e5+5;intt,n,m,u,v,fa[maxn];ll ans;vector<int>g[maxn];llsquare(intx){return(ll)x*x;}intfind(intx){if(x==fa[x])returnx;returnfa[x]=find(fa[x]);}lldis(intx,inty){ll res=1e18;inta,b;for(inti=0;i<g[x].size();i++){a=g[x][i],b=lower_bound(g[y].begin(),g[y].end(),a)-g[y].begin();//二分if(b)res=min(res,square(a-g[y][b-1]));//比a小里最接近a的if(b<g[y].size())res=min(res,square(a-g[y][b]));//比a大里最接近a的}returnres;}intmain(){scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(inti=1;i<=n;i++){fa[i]=i;g[i].clear();}//初始化for(inti=1;i<=m;i++){scanf("%d%d",&u,&v);fa[find(u)]=find(v);}for(inti=1;i<=n;i++)g[find(i)].push_back(i);u=fa[1],v=fa[n],ans=dis(u,v);//1与n直接相连for(inti=1;i<=n;i++){if(fa[i]==u||fa[i]==v||fa[i]!=i)continue;ans=min(ans,dis(i,u)+dis(i,v));//找到某个点与1和n相连}printf("%lld\n",ans);}return0;}

后续

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

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

相关文章:

  • BNS Lang:用数字键盘语言革新PLC梯形图编程
  • 告别轮询和傻等:在STM32上实现更高效的RS485主从通信与防冲突机制
  • 微电子会议哪家专业?技术交流活动汇总 - 品牌2026
  • 公司买单成AI职业化开关,职场分化凸显,Copilot领跑、Klarna“翻车”揭示AI边界
  • 技术Leader必看:用OKR+人才九宫格,给你的研发团队做一次高效人才盘点(附实操模板)
  • GSE高级宏编译器3.2.26版本架构深度解析:突破魔兽世界宏编程的技术边界
  • 告别臃肿!GHelper:华硕笔记本性能控制的轻量级革命
  • 国产超声波搅拌机生产厂家测评:杭州辰轩vs精浩,权威与实力对决 - 品牌推荐大师1
  • Cursor Pro破解技术深度解析:机器标识重置与AI编程助手无限使用方案
  • 终极静音指南:如何用GHelper手动控制风扇,让ROG笔记本安静如猫
  • B站缓存视频合并完整指南:3步将碎片化缓存转为完整MP4
  • CD-HIT:如何让海量生物序列分析从数周缩短到数小时?
  • Ubuntu 20.04开机自启踩坑实录:为什么你的rc.local脚本不执行?
  • 保姆级教程:用Python+Matplotlib可视化分析气团与锋的天气过程(附代码)
  • 7大核心功能重构:MASA全家桶汉化包的中文界面革命
  • 解放双手!明日方舟全自动小助手MAA的终极使用指南
  • 暗黑2存档编辑器:逆向工程与数据流处理技术深度解析
  • 百考通AI:拆解论文两大痛点,把“学术焦虑”变“可控步骤”
  • curl-wget-yum基础用法与区别对比
  • 从复位同步到握手协议:VC Spyglass CDC功能验证(Functional Verification)实战指南
  • 图像质量评估与多模态RAG系统优化实践
  • 惠普游戏本性能释放终极指南:用OmenSuperHub解锁你的硬件潜力
  • 如何快速上手OpenBCI GUI:解锁脑机接口的终极开源工具
  • Winhance中文版:三步让你的Windows系统飞起来!
  • 2026 年 3 月一周内三巨头齐推交互式可视化技术,AI 从文字机器迈向表达工具!
  • 好写作AI的官网不是写作软件——它是你的“论文写作指挥台”
  • 别再让ArrayList在多线程里‘丢数据’了!手把手教你选对synchronizedList和CopyOnWriteArrayList
  • 移动端适配演进
  • 3步掌握ASMR音频自动下载:asmr-downloader终极使用指南
  • Akagi麻将AI助手:如何用AI实时分析提升你的麻将水平?