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

C造桥与砍树

链接

题意:

有n个带权的点以及参数k,要求生成一个最小生成树,每个点之间的边权为两个点权之和模k的结果

思路:

对所有权值模k后

发现对于一个权值为val的结点u,链接它的最优结点是 现在还没进入生成树的 (权值最小)或者(最小的 权值大于等于k-val) 的节点

因此贪心去选择这些边,然而有可能从u出发有不止两条的最优连边,因此在优先队列取出某个结点后,还需要对其前缀结点再次进行连边操作

int n,k;
const int M=1e5+5;
pii a[M];
struct node{int w;int val;int u;int pre;int pre_val;bool operator<(const node&a)const{return w>a.w;}node(){}node(int a,int b,int c,int p,int z){w=a;val=b;u=c;pre=p;pre_val=z;}
};
void solve(){cin>>n>>k;rep(i,1,n){cin>>a[i].fi;a[i].fi%=k;a[i].se=i;}sort(a+1,a+1+n);int ans=0;priority_queue<node>pq;pq.push(node(0,a[1].fi,a[1].se,0,0));set<pii>st;rep(i,1,n)st.insert({a[i].fi,a[i].se});// vector<pii>vec;vector<int>vis(n+1);while(pq.size()){auto[w,val,u,pre,pre_val]=pq.top();pq.pop();if(vis[u])continue;vis[u]=1;st.erase({val,u});ans+=w;if(st.size()==0)break;// vec.pb({u,val});pii X=(*st.begin());pq.push(node((val+X.fi)%k,X.fi,X.se,u,val));auto it=(st.lower_bound({k-val,0}));if(it!=st.end()){X=(*it);pq.push(node((val+X.fi)%k,X.fi,X.se,u,val));}if(pre){X=(*st.begin());pq.push(node((pre_val+X.fi)%k,X.fi,X.se,pre,pre_val));auto it=(st.lower_bound({k-pre_val,0}));if(it!=st.end()){X=(*it);pq.push(node((pre_val+X.fi)%k,X.fi,X.se,pre,pre_val));}}}cout<<ans<<endl;
}
http://www.zskr.cn/news/10846.html

相关文章:

  • Keil uVision5 MDK 5.42安装教程(支持ARM Cortex全系列开发)
  • 从Void到Task<PublishAggregateResult>:一次服务方法返回类型重构的纠结与决策
  • jenkins job的configure中配置git时 选择的credential为什么不能选择secret认证方式的数据
  • Day21继承
  • 实用指南:科研绘图Origin百度云盘下载与安装指南
  • 题解:P8300 [COCI 2012/2013 #2] INSPEKTOR
  • SuperHarness-3D低压柜机电协同设计方案!
  • 详细介绍:.NET驾驭Word之力:打造专业文档 - 页面设置与打印控制完全指南
  • vim 入门教学4(命令行模式教学)
  • 使用.NET标准库实现多任务并行处理的详细过程 - 实践
  • 模型训练中 平均损失值和平均准确率的深入理解
  • 一篇了解 Git 运用方式
  • torch.max函数在分类问题中的使用 学习
  • react native 国际化 react-i18next 和 i18n,运用高级组件的形式。 - 指南
  • react性能优化
  • Gitee如何重塑中国开发者的代码托管体验
  • 模块化面向对象 2章
  • Debezium + Kafka + Flink/Doris Stream Load 实时数仓
  • 实用指南:【Makefile】Linux内核模块编译
  • Gitee DevOps平台:中国企业数字化转型的代码管理新范式
  • 幂运算与航班中转的奇妙旅行:探索算法世界的两极 - 实践
  • 论Linux安装后需要进行的配置
  • 51单片机-驱动DS1302时钟芯片模块教程 - 实践
  • 数组和链表读取、插入、删除以及查找的区别
  • 在K8S中,日志分析工具有哪些可以与K8S集群通讯?
  • 【2025最新教程】Claude Code国内使用_保姆级新手安装使用教程_最强AI编程工具
  • 如何计算sequence粒度的负载均衡损失 - 教程
  • P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串
  • 西电PCB设计指南第3章学习笔记
  • Vitrualbox、kali、metaspolitable2下载安装