[atARC103F]Distance Sums
给定n个数di,构造一棵n个点的树使得∀1≤i≤n,∑nj=1dist(i,j)=di
其中dist(i,j)表示i到j的路径上所经过的边数,若无解输出-1
2≤n≤105,1≤di≤1012,保证di各不相同

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 #define pli pair<long long,int> 5 #define fi first 6 #define se second 7 vector<pli>e; 8 int n,sz[N]; 9 pli d[N]; 10 int main(){ 11 scanf("%d",&n); 12 for(int i=1;i<=n;i++){ 13 scanf("%lld",&d[i].fi); 14 d[i].se=i; 15 } 16 sort(d+1,d+n+1); 17 for(int i=1;i<=n;i++)sz[i]=1; 18 for(int i=n;i>1;i--){ 19 int fa=lower_bound(d+1,d+i+1,make_pair(d[i].fi+(2*sz[i]-n),0))-d; 20 if (d[fa].fi!=d[i].fi+(2*sz[i]-n)){ 21 printf("-1"); 22 return 0; 23 } 24 sz[fa]+=sz[i]; 25 e.push_back(make_pair(d[fa].se,d[i].se)); 26 } 27 for(int i=2;i<=n;i++)d[1].fi-=sz[i]; 28 if (d[1].fi)printf("-1"); 29 else 30 for(int i=0;i<n-1;i++)printf("%d %d\n",e[i].fi,e[i].se); 31 }
分类:
atcoder
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 2025成都.NET开发者Connect圆满结束
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络
2019-11-10 [bzoj2330]糖果
2019-11-10 [bzoj1877]晨跑
2019-11-10 [bzoj1834]网络扩容
2019-11-10 [bzoj1934]善意的投票
2019-11-10 [bzoj3038]上帝造题的7分钟2