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

Cartesian MST

https://codeforces.com/gym/103098/problem/C

一开始以为对 \(u\) 相等的每组点都是直接用 \(H\) 的 mst 去连接,然后把 \(u\) 相等的每组点当成一个整体就是 \(G\) 的 mst 去连 \(n\) 组点。或是对 \(v\) 相等的每组点整体看同理。
这样的话 \(ans=\min(V_H\cdot n+V_G,V_G\cdot n_1+V_H)\)

后面发现对于 \(u_i\not= u_j,v_i = v_j\) 可以 \(v_i\) 连向 \(v_j\) 就可以用 \(u_i\to u_j\) 的权值省去 \(v_j\)\(v_j\) 父亲的边权。相当于对于上文 \(u\) 相等的每组点内,第 \(u_i\) 组的连接可以用 \(u_i\)\(G\) 图中 mst 中所连的权值最小的边去替换这组内所有边权小于它的 \(H\) 图 mst 包含的边(假定 \(u_i\) 在 mst 中所连的权值最小的边为 \(u_j\to u_i\) 那么可以从第 \(u_j\) 组内的 \(v\) 去连接 \(u_i\) 组内相同的 \(v\),然后 \(u_i\) 组内的 \(v\) 就可以断开其与父亲的边)。所以对于每一条 \(G\) 图 mst 中的边,用双指针求出它比 \(H\) 图 mst 中的多少条边权值小以及这些边的权值和,假设为 \(cnt,sum\),答案初始为 \(V_H\cdot n+V_G\),则这条边对答案的更新为 \(ans\gets ans-sum+w\cdot cnt\) 其中 \(w\) 为这条边的权值。

\(G\) 图中边权从小至大每一条边 \(u_i\to u_j\) 都只对 \(u_j\) 所在的 \(H\) 的 mst 的权值做贡献,此时会发现只对 \(n-1\) 个 mst 做了贡献,但这是正确的,因为要保证至少有一组 \(u\) 相等的点是按照 \(H\) 图的 mst 来连接的才能保证最终结果连通,否则如果出现每组点都断掉了 \(H\) 图 mst 中的某条边便不连通了。

时间复杂度 \(O(mlogm)\)

#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define db double
#define endl '\n'
#define lowbit(x) x&-x
#define intz(x,a) memset(x,a,sizeof(x))
const int N=2e5+5;
struct edge{int u,v,w;}e[N],e1[N];int f[N];bool vis[N],vis1[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int get(int n,int m,edge *e,bool *vis){int sum=0;for(int i=1;i<=n;i++)f[i]=i;for(int i=1;i<=m;i++)if(find(e[i].u)^find(e[i].v))vis[i]=1,f[find(e[i].u)]=find(e[i].v),sum+=e[i].w;return sum;
}
signed main(){int n,m,n1,m1,s,s1;cin>>n>>m>>n1>>m1;for(int i=1;i<=m;i++)cin>>e[i].u>>e[i].v>>e[i].w,++e[i].u,++e[i].v;sort(e+1,e+1+m,[](edge x,edge y){return x.w<y.w;});s=get(n,m,e,vis);for(int i=1;i<=m1;i++)cin>>e1[i].u>>e1[i].v>>e1[i].w,++e1[i].u,++e1[i].v;sort(e1+1,e1+1+m1,[](edge x,edge y){return x.w<y.w;});s1=get(n1,m1,e1,vis1);int cnt=0,sum=0,pos=m1,ans=s1*n+s;for(int i=m;i;i--){while(pos&&e[i].w<e1[pos].w){if(vis1[pos])sum+=e1[pos].w,++cnt;--pos;}if(vis[i])ans=ans-sum+e[i].w*cnt;}cout<<ans;return 0;
}
http://www.hskmm.com/?act=detail&tid=32109

相关文章:

  • P5609 [Ynoi2013] 对数据结构的爱
  • 剪映高级感口播动态文字字幕排版预设标题入场出场动画素材850款
  • JavaScript 中的安全编码:10 个关键实践
  • 2025 年最新推荐!国内优质球墨铸铁管厂家排行榜,涵盖市政 / 给水 / 水利工程适用产品
  • STM32 代码
  • 2025 年最新冷水机定制厂家排行榜:工业 / 防爆 / 低温 / 水冷 / 螺杆 / 超低温等多类型冷水机优质品牌推荐
  • 2025 年飞机票预定公司最新推荐排行榜:聚焦专业诚信,覆盖特殊旅客与企业服务的口碑榜单
  • 2025 年水质测定仪厂家最新推荐排行榜:解析科技等优质企业实力领衔,助您精准选品多参数/便携式/cod快速/台式水质测定仪厂家推荐
  • 2025 年电永磁吊具厂家最新推荐排行榜:涵盖多类型吊具优质厂家及专业选型参考大型电/全覆盖电/起重电永磁吊具厂家推荐
  • Redis布隆过滤器 Redisson 汇总
  • 2025 年电子散热器厂家推荐:镇江新区富利电子散热器厂,多领域适配与品质服务的可靠之选
  • 高级 RAG 实战:Neo4j 与 LangChain 构建知识图谱驱动的 AI 系统
  • 朴诚乳业携手纷享销客CRM6周实现项目全国推广(附9大核心能力)
  • 2025 年最新推荐 AI 健康管理公司榜单:覆盖多场景,为机构选品提供权威参考
  • 从playfield开源代码复制的opensl es初始化代码
  • 第九届电气、机械与计算机工程国际学术会议(ICEMCE 2025)
  • 2025 年螺带混合机优质厂家最新推荐排行榜:聚焦综合实力、产品性能与服务质量的权威筛选榜单
  • P2151 HH 去散步
  • 2025年钢结构建材厂家最新推荐排行榜,彩钢瓦,镀锌板,折弯件,C型钢,Z型钢,压型瓦,楼承板,钢结构安装,次檩条公司推荐
  • 2025年发电机组厂家最新权威推荐榜:柴油/燃气/船用/静音箱式/移动拖车/集装箱发电机组,上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU品牌全覆盖
  • 2025年铣刀厂家最新权威推荐榜:雕刻机铣刀/金刚石铣刀/木工铣刀/绝缘材料铣刀/碳纤维铣刀/亚克力铣刀/金属加工铣刀/铝合金铣刀/石墨铣刀/不锈钢铣刀/金属切削铣刀/电木铣刀/塑胶铣刀/PC铣刀
  • 2025年下半年权威信息公布:西安学区房/书包房/五大名校/交大书包新楼盘口碑推荐榜前十强出炉,高得房率/推荐好房/地铁口/小高层/低总价/低单价/高性价比/高赠送/四代宅
  • 第六届大数据、人工智能与物联网工程国际会议(ICBAIE 2025)
  • .NET 10中GC(垃圾收集器)更新
  • 【转】扫盲:Windows桌面应用开发框架:原生、跨平台、云桌面
  • vxe-table v4版本使用注意事项
  • ​​电容瞬态放电原理:大电流的产生机制深度解析​
  • Chrome浏览器离线版下载,谷歌(Google)浏览器离线安装包下载,手机版,Mac版,window版都有,不上网也可以安装
  • 基于Java+Springboot+Vue开发的在线摄影预约管理系统源码+运行步骤
  • 2025 年超微粉碎机厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析