【树链剖分+MST】CF609E

news2024/9/25 1:15:40

Problem - E - Codeforces

题意:

思路:

先把全局的MST求出来,然后对于一条边,如果它本来就在MST中,说明代价就是MST的权值和,否则它加入MST中,此时MST形成了环,我们把环中最大的那条边删掉,就相当于用这条边换掉了环中最大边,这样就是最小权值和

那么怎么求环中最大边,直接树剖即可

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=4e5+10;
const int mxe=4e5+10;

struct ty{
	int to,next,w;
}edge[mxe<<2];

struct ty2{
	int val,add;
}tree[mxe<<2];

struct ty3{
	int u,v,w,id,Flag=0;
}e[mxe<<2];

int N,M,rt,P;
int op,u,v,w;
int tot=0,idx=0,answ=0;
int F[mxn],ans[mxn],p[mxn];
int head[mxn],sz[mxn],Fa[mxn],dep[mxn],id[mxn];
int nw[mxn],son[mxn],top[mxn];

void pushup(int rt){
	tree[rt].val=max(tree[rt<<1].val,tree[rt<<1|1].val);
}
int query(int rt,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		return tree[rt].val;
	}
	int mid=l+r>>1;
	int res=0;
	if(x<=mid) res=max(res,query(rt<<1,l,mid,x,y));
	if(y>mid) res=max(res,query(rt<<1|1,mid+1,r,x,y));
	return res;
}
int query_path(int u,int v){
	int res=0;
	while(top[u]!=top[v]){
		if(dep[top[u]]<dep[top[v]]) swap(u,v);
		res=max(res,query(1,1,N,id[top[u]],id[u]));
		u=Fa[top[u]];
	}
	if(dep[u]>dep[v]) swap(u,v);
	res=max(res,query(1,1,N,id[u]+1,id[v]));
	return res;
}
void dfs2(int u,int t){
	id[u]=++idx;
	nw[idx]=p[u];
	top[u]=t;
	if(!son[u]) return;
	dfs2(son[u],t);
	for(int i=head[u];~i;i=edge[i].next){
		if(edge[i].to==Fa[u]||edge[i].to==son[u]) continue;
		dfs2(edge[i].to,edge[i].to);
	}
}
void dfs1(int u,int fa){
	Fa[u]=fa;
	dep[u]=dep[fa]+1;
	sz[u]=1;
	for(int i=head[u];~i;i=edge[i].next){
		if(edge[i].to==fa){
			p[u]=edge[i].w;
			continue;
		}
		dfs1(edge[i].to,u);
		sz[u]+=sz[edge[i].to];
		if(sz[son[u]]<sz[edge[i].to]) son[u]=edge[i].to;
	}
}
void add(int u,int v,int w){
	edge[tot].w=w;
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
void G_init(){
	tot=0;
	for(int i=0;i<mxn;i++){
		head[i]=-1;
	}
}
void build(int rt,int l,int r){
	if(l==r){
		tree[rt].val=nw[l];
		return;
	}
	int mid=l+r>>1;
	build(rt<<1,l,mid);
	build(rt<<1|1,mid+1,r);
	pushup(rt);
}
bool cmp(ty3 x,ty3 y){
	return x.w<y.w;
}
int find(int x){
	return F[x]=(x==F[x])?x:find(F[x]);
}
void join(int u,int v){
	int f1=find(u),f2=find(v);
	if(f1!=f2){
		F[f1]=f2;
	}
}
void solve(){
	cin>>N>>M;
	G_init();
	for(int i=1;i<=N;i++) F[i]=i;
	for(int i=1;i<=M;i++){
		cin>>u>>v>>w;
		e[i]={u,v,w,i,0};
	}
	sort(e+1,e+1+M,cmp);
	for(int i=1;i<=M;i++){
		if(find(e[i].u)==find(e[i].v)) continue;
		join(e[i].u,e[i].v);
		answ+=e[i].w;
		e[i].Flag=1;
		add(e[i].u,e[i].v,e[i].w);
		add(e[i].v,e[i].u,e[i].w);
	}
	dfs1(1,0);
	dfs2(1,0);
	build(1,1,N);
	for(int i=1;i<=M;i++){
		ans[e[i].id]=answ+e[i].w-query_path(e[i].u,e[i].v);
	}
	for(int i=1;i<=M;i++) cout<<ans[i]<<'\n';
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入探究Java面向对象的三大特征:封装、继承、多态

文章目录 1. 封装&#xff08;Encapsulation&#xff09;2. 继承&#xff08;Inheritance&#xff09;3. 多态&#xff08;Polymorphism&#xff09;结语 导语&#xff1a;Java是一门面向对象的编程语言&#xff0c;其核心思想是将现实世界中的事物抽象成对象&#xff0c;并通过…

Python(五十二)列表元素的判断及遍历

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

自己整理的JAVA集合

概括&#xff1a; 数组&#xff0c;链表&#xff0c;散列表&#xff0c;二分查找树&#xff0c;红黑树是五种不同的数据结构&#xff0c;它们有各自的特点和用途。ArrayList&#xff0c;LinkedList&#xff0c;HashTable&#xff0c;LinkedHashMap&#xff0c;HashMap 是 Java…

Camera组件

Clear Flags&#xff1a; Skybox&#xff1a;天空盒 Solid Color&#xff1a;填充颜色&#xff0c;当有空白处时填充背景颜色 Depth Only&#xff1a;只渲染想要渲染的层级 Dont Clear&#xff1a;不清除上一帧所留下来的数据&#xff0c;可以做类似残影的效果 Culling Mas…

Unity Addressable

Unity重要目录 工程中的几个重要目录 Assets存放资源、代码、配置Library大部分的资源导入到Assets目录之后&#xff0c;会转化成Unity认可的文件&#xff0c;转化后的文件会存储在这个目录Logs日志文件Packages第三方插件ProjectSettings存放各种项目设定UserSettings用户偏好…

CentOS 8 错误: Error setting up base repository

配置ip、掩码、网关、DNS VMware网关可通过如下查看 打开网络连接 配置镜像的地址 vault.centos.org/8.5.2111/BaseOS/x86_64/os/

java 阿里云 发送短信功能实现

1. 注册短信平台(以阿里云为例) 常用短信服务平台&#xff1a;阿里云、华为云、腾讯云、京东、梦网、乐信等 2. 注册成功后&#xff0c;开通短信服务 3. 设置短信签名、短信模板、AccessKey AccessKey 是访问阿里云 API 的密钥&#xff0c;具有账户的完全权限&#xff0c;我们…

C语言实现三子棋游戏

test.c源文件 - 三子棋游戏测试 game.h头文件 - 三子棋游戏函数的声明 game.c源文件 - 三子棋游戏函数的实现 主函数源文件&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include"game.h" //自己定义的用"" void menu() {printf("*************…

代码随想录算法训练营day43

文章目录 Day43 最后一块石头的重量II题目思路代码 目标和题目思路代码 一和零题目思路代码 Day43 最后一块石头的重量II 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 题目 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0…

2023-07-30 LeetCode每日一题(环形链表 II)

2023-07-30每日一题 一、题目编号 142. 环形链表 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 n…

【探索C++中的顺序表】手动实现vector容器

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;初阶数据结构 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对…

Fourier变换及其应用(Brad G. Osgood)——第2章——Fourier变换

第2章 Fourier变换 2.1 初识Fourier变换(A First Look at the Fourier Transform) 我们即将从Fourier级数过渡到Fourier变换。“过渡(transition)”是合适的词&#xff0c;因为我们选择了Fourier变换从周期函数到非周期函数的引出路径。 为了完成这一旅程&#xff0c;我们将把…

【优选算法题练习】day10

文章目录 一、137. 只出现一次的数字 II1.题目简介2.解题思路3.代码4.运行结果 二、剑指 Offer 53 - II. 0&#xff5e;n-1中缺失的数字1.题目简介2.解题思路3.代码4.运行结果 三、153. 寻找旋转排序数组中的最小值1.题目简介2.解题思路3.代码4.运行结果 总结 一、137. 只出现一…

登录报错 “msg“:“Request method ‘GET‘ not supported“,“code“:500

1. 登录失败 2. 排查原因, 把 PostMapping请求注释掉, 或改成GetMapping请求就不会报错 3. 找到SecurityConfig.java , 新增 .antMatchers("/**/**").permitAll() //匹配允许所有路径 4. 登录成功

【算法基础:动态规划】5.4 状态压缩DP

文章目录 例题列表291. 蒙德里安的梦想⭐⭐⭐⭐⭐91. 最短Hamilton路径⭐⭐⭐ 相关链接 例题列表 291. 蒙德里安的梦想⭐⭐⭐⭐⭐ https://www.acwing.com/problem/content/293/ 当横向方格摆放完成后&#xff0c;纵向方格的拜访方式就已经确定了。&#xff08;因为我们只要求…

井字棋(TicTacToe)

目录 三种游戏 习题 1. 传统设置 2. 中间的网格 三种游戏 “选15”、“井字棋”、“魔幻15”游戏本质上是同一个游戏。 function tictactoe(job) % TICTACTOE Pick15, TicTacToe, and Magic3. % % Pick15. Pick single digit numbers. Each digit can be chosen % on…

蓝海卓越计费管理系统远程命令执行

活着&#xff0c;就要时刻准备承受磨难&#xff01; 漏洞描述 蓝海卓越计费管理系统存在命令调试页面&#xff0c;导致攻击者可以远程命令执行 漏洞复现 访问 debug.php页面 远程调试命令执行 /debug.php漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝…

GIS基础制图之地形图

数据:地理空间数据云(http://www.gscloud.cn/)下一张北京地区DEM(30m),统一用这一张来做。 晶格 工具运行窗口不贴了,因为参数设置基本上都是默认没有什么要改的 1、「3D Analyst」—「转换」—「由栅格转出」—「栅格转TIN」 2、「3D Analyst」—「转换」—「由TIN转出」—…

【Rust教程 | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一&#xff0c;Cargo介绍1&#xff0c;Cargo安装2&#xff0c;创建Rust项目2&#xff0c;编译项目&#xff1a;3&#xff0c;运行项目&#xff1a;4&#xff0c;测试项目&#xff1a;5&#xff0c;更新项目的依赖&#xff1a;6&#xff0c;生成项目的文档&#xf…

MP的开发流程

MP的开发流程 1、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…