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

打卡信奥刷题(2967)用C++实现信奥题 P5959 [POI 2018] Plan metra

P5959 [POI 2018] Plan metra

题目描述

有一棵nnn个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度。

已知222到 $ n-1$ 每个点在树上与111nnn的距离,请根据这些信息还原出这棵树。

输入格式

第一行包含一个正整数nnn,表示点数。

第二行包含n−2n-2n2个正整数d(1,2),d(1,3),...,d(1,n−1)d(1,2),d(1,3),...,d(1,n-1)d(1,2),d(1,3),...,d(1,n1),分别表示每个点到111的距离。

第三行包含n−2n-2n2个正整数d(n,2),d(n,3),...,d(n,n−1)d(n,2),d(n,3),...,d(n,n-1)d(n,2),d(n,3),...,d(n,n1),分别表示每个点到nnn的距离。

输出格式

若无解,输出NIE

否则第一行输出TAK,接下来n−1n-1n1行每行三个正整数u,v,cu,v,cu,v,c,表示存在一条长度为ccc的连接uuuvvv两点的树边。

若有多组解,输出任意一组即可。

本题使用 Special Judge。

输入输出样例 #1

输入 #1

7 6 6 2 2 1 5 3 5 1 4

输出 #1

TAK 1 5 2 5 7 1 5 2 4 7 3 3 1 4 2 1 6 1

说明/提示

对于100%100\%100%的数据,2≤n≤5000002\le n\le 5000002n5000001≤d≤10000001\le d\le 10000001d10000001≤u,v≤n1\le u,v\le n1u,vn1≤c≤10000001\le c\le10000001c1000000

C++实现

#include<cstring>#include<iostream>#include<algorithm>#include<cstdlib>#include<cmath>usingnamespacestd;intn;voidWA(){puts("NIE"),exit(0);}structdata{intx,y,id;}f[500005];boolcmp(data a,data b){returna.x+a.y==b.x+b.y?a.x<b.x:a.x+a.y<b.x+b.y;}boolCMP(data a,data b){returna.x<b.x;}intope[10000005],*val=ope+5000000;//桶intfa[500005],v[500005];signedmain(){intM=0x3f3f3f3f;scanf("%d",&n);//cout<<n<<endl;for(inti=1;i<=n;i++)f[i].id=i;for(inti=2;i<n;i++)scanf("%d",&f[i].x);for(inti=2;i<n;i++)scanf("%d",&f[i].y);for(inti=2;i<n;i++)M=min(M,f[i].x+f[i].y);f[1]={0,M,1},f[n]={M,0,n};sort(f+1,f+n+1,cmp);//排序来分隔在线上的和不在的。ints;val[-M]=1;//往桶里塞进d(1,1)-d(1,n)for(s=2;s<=n;s++){if(f[s].x+f[s].y==M){//在线上if(f[s].x==f[s-1].x)WA();//点间距离!=0val[f[s].x-f[s].y]=s;}elsebreak;//不在}for(inti=s;i<=n;i++){int&t=val[f[i].x-f[i].y];if(t)fa[i]=t,v[i]=f[i].x-f[t].x;elseWA();}puts("TAK");for(inti=2;i<s;i++)printf("%d %d %d\n",f[i-1].id,f[i].id,f[i].x-f[i-1].x);for(inti=s;i<=n;i++)printf("%d %d %d\n",f[fa[i]].id,f[i].id,v[i]);return0;}

后续

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

http://www.cnnetsun.cn/news/1349303.html

相关文章:

  • 论文人救星!Paperxie:从初稿到终稿,一站式搞定写作 / 绘图 / 排版 / AI 率
  • V-DyKnow A Dynamic Benchmark for Time-Sensitive Knowledge in Vision Language Models
  • Qt导航栏组件A03:VS Code 风格的图标侧栏
  • 【Rust 语言编程知识与应用:表达式详解】
  • 增程式电动汽车自适应ECMS能量管理策略:基于工况的Matlab实现方案
  • C#全自动多线程上位机源码编程 0,纯源代码。 1,替代传统plc搭载的触摸屏。 2,工控屏幕...
  • comsol数值模拟。 金属合金凝固数值模拟,连铸过程数值模拟,相场流场温度场,坯壳厚度计算
  • 基于改进蛇优化算法(GOSO/ISO)优化极限梯度提升树的时间序列预测
  • 在现代工业自动化中,恒压供水系统是一个常见的应用场景,特别是在高楼大厦、工厂和住宅小区中。今天,我们来聊聊如何用三菱PLC和组态王实现三泵变频恒压供水系统
  • 从统一入口到角色化体验:全面理解 SAP Fiori Launchpad 与 SAP Fiori Apps 的实施逻辑
  • 工业检测实战:同轴光源LFV3系列在金属刻印字符识别中的5个关键技巧
  • Hunyuan MT1.5-1.8B API限流设计:生产环境稳定性保障
  • 华为NAT类型选型指南:为什么你的企业网络应该用NAPT而不是静态NAT?
  • dac/cap/lsm
  • Rust impl关键字实战:从封装到多态的全面解析
  • 别再滥用dynamic了!C#动态类型避坑指南与性能优化技巧
  • 从零到一:基于MaxKB与Ollama构建企业级私有化智能知识库
  • LayUI树形下拉选择器实战:5分钟搞定权限管理菜单的动态加载
  • #训练营# 基于GD32E230与CH342F的便携式多功能调试工具:简易示波器+双串口+交换机Console(DB9/蓝牙)
  • CLIP-GmP-ViT-L-14开源大模型教程:CLIP-GmP变体本地化图文评估新范式
  • 图图的嗨丝造相-Z-Image-Turbo实战落地:短视频团队日更100+张风格统一渔网袜封面图方案
  • Github贡献图变身贪吃蛇:自动化工作流配置全解析
  • Flutter嵌入式ARM64 Linux应用实战:从交叉编译到真机部署
  • MusePublic在电商场景的应用:快速生成商品模特图与时尚海报
  • 快速上手:使用Docker Compose一键部署LiuJuan模型及WebUI
  • 收下这6款消除背景工具,让你的PPT、海报、电商图都能再上台阶。
  • 利用GStreamer和SRT协议实现低延迟视频推流与VLC播放实战
  • 深求·墨鉴在学术场景的应用:高效提取论文图表与公式
  • 十八、基于HC32F4A0与天空星开发板的PWM呼吸灯实战:从TimerA配置到占空比动态调节
  • OmenSuperHub:惠普OMEN游戏本专属系统优化工具