首页 > 其他分享 >lca模板

lca模板

时间:2024-11-13 11:33:34浏览次数:1  
标签:par val min int lca dep ans 模板

https://www.luogu.com.cn/problem/P1967

#include<bits/stdc++.h>

#define int long long
#define endl '\n'
#define x first 
#define y second

using namespace std;

const int N=6e4+10,mod=998244353;
const int LOGN=20;

typedef pair<int,int> PII;

struct Node{
	int a,b,c;	
}edges[N]; 

int p[N];
int par[N][22],val[N][22];
int dep[N];
vector<PII> e[N];
int n,m;

bool cmp(Node x,Node y){
	return x.c>y.c;
}

int find(int x){
	if(p[x]!=x) return p[x]=find(p[x]);
	return p[x];
}

void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	for(auto t:e[u]){
		int v=t.x,w=t.y;
		if(v==fa) continue;
		par[v][0]=u;
		val[v][0]=w;
		dfs(v,u);
	}
}

void slove(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) p[i]=i;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		edges[i]={u,v,w};
	}
	sort(edges+1,edges+1+m,cmp);
	
	for(int i=1;i<=m;i++){
		int a=edges[i].a,b=edges[i].b,c=edges[i].c;
		int pa=find(a),pb=find(b);
		if(pa==pb) continue;
		p[pa]=pb;
		e[a].push_back({b,c});
		e[b].push_back({a,c});
	}
	
	for(int i=1;i<=n;i++)
	if(p[i]==i) dfs(i,0);
	
	for(int j=1;j<=LOGN;j++)
	 for(int i=1;i<=n;i++){
	 	par[i][j]=par[par[i][j-1]][j-1];
	 	val[i][j]=min(val[i][j-1],val[par[i][j-1]][j-1]);
	 }
	
	int q;
	cin>>q;
	while(q--){
		int u,v;
		cin>>u>>v;
		if(find(u)!=find(v)){
			cout<<-1<<endl;
			continue;
		}
		if(dep[u]>dep[v]) swap(u,v);
		int d=dep[v]-dep[u];
		int ans=2e9+10;
		
		for(int i=LOGN;i>=0;i--)
		if(d>>i&1){
			ans=min(ans,val[v][i]);
			v=par[v][i];
		}
		if(u==v){
			cout<<ans<<endl;
			continue;
		}
		for(int i=LOGN;i>=0;i--) if(par[u][i]!=par[v][i]){
			ans=min(ans,min(val[u][i],val[v][i]));
			u=par[u][i];
			v=par[v][i];
		}
		ans=min(ans,min(val[u][0],val[v][0]));
		cout<<ans<<endl;
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int T=1;
//	cin>>T;
	while(T--) slove(); 
}

标签:par,val,min,int,lca,dep,ans,模板
From: https://www.cnblogs.com/mendax-Z/p/18543550

相关文章

  • HTML5期末大作业:北京旅游网页设计制作(1页) 简单静态HTML网页作品 我的旅游网页作业成
    ......
  • 一、虚拟DOM本质,模板本质,组件树和DOM树,数据拦截的本质
    一、虚拟DOM本质1.真实DOM原理:是由JS引擎创建DOM后,识别为API,发送到浏览器内核中,由渲染主线程进行渲染,最终将结果返回给JS引擎。2.什么是虚拟DOM:就是JS对象,是创建DOM对象是在JS引擎终进行的。二、模板的本质1、流程:进行了模板编译器最终生成了模板(解析器-模板AST-转换器-JSAS......
  • word模板填充 java
    From: https://blog.51cto.com/u_16213356/12447686在现代开发中,Word文档的自动生成和模板填充是一项非常常见的需求。尤其是在生成报表、合同、信函等场景时,通过代码自动化填充模板可以极大提高工作效率。本文将详细介绍如何使用Java实现Word模板填充。我们将通过以下步骤......
  • 使用Java填充Word模板的方法详解
    From: https://www.jb51.net/program/324679hhw.htmJava填充Word模板是一种将动态数据插入到Word文档模板中生成最终文档的过程,通常用于批量创建包含个人信息、报告结果或其他动态内容的文档,本文给大家介绍了使用Java填充Word模板的方法,需要的朋友可以参考下 +目录概......
  • 新手如何学习CSP-S组知识STL模板和线性结构?一篇博文让你明白
    一、C++STL模板学习STL是C++标准库的一部分,提供了一套通用的、可重用的模板类和函数,用于处理常见的数据结构和算法。STL的设计理念是“泛型编程”,即编写与类型无关的代码,通过模板参数在编译时指定具体类型。STL主要包含容器、算法和迭代器三个组件。1.容器(Containers)容器......
  • C++基础 抽象类 类模板 STL库 QT环境
    一、抽象类1、纯虚函数        在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数。        语法:virtual返回值类型函数名(参数列表)=0;2.抽象类1)概念        有纯虚函数所在的类,称......
  • Freemarker模板 jar!/BOOT-INF/classes!/**.html
    需求:发送邮件,邮件内容通过Freemaker模板生成,如下代码:Configurationconfiguration=newConfiguration(Configuration.getVersion());configuration.setDefaultEncoding("utf-8");/**加载模板目录**///这个方法在IDEA跑是OK的Filefile=ResourceUtils.getFile("clas......
  • 题解:洛谷 P5180 【模板】支配树
    在图论模拟赛被T4的有向图必经点硬控了\(10^9+7s\),写篇题解纪念一下。其实,求有向图的必经点,通法就是支配树。一些定义:支配点:在确定起点\(S\)的情况下,对于一个点\(k\),若存在\(x\),使得删除\(x\)以及与\(x\)连接的边后,\(x\)与\(k\),不再强连通,那么就称\(k\)为\(x......
  • 【C++】模板(一):函数模板
    大家好,我是苏貝,本篇博客带大家了解C++的函数模板,如果你觉得我写的还不错的话,可以给我一个赞......
  • 微信公众号发送模板消息实现
    微信公众号模板消息文章目录微信公众号模板消息1、准备工作2、代码实现2.1、配置信息2.2、代码实现2.2.1、发送业务代码实现2.2.2、获取公众号AccessToken1、准备工作1.1、申请公众号1.2、配置模板消息2、代码实现2.1、配置信息公众号小程序配置信息#微信......