蓝桥杯真题讲解:网络稳定性(Kruskal重构树+LCA)

蓝桥杯真题讲解:网络稳定性(Kruskal重构树+LCA)

一、视频讲解

蓝桥杯真题讲解:网络稳定性(Kruskal重构树+LCA)

二、正解代码

cpp 复制代码
//kruskal重构树 + lca
#include<bits/stdc++.h>
#define endl "\n"
#define deb(x) cout << #x << " = " << x << '\n';
#define INF 0x3f3f3f3f
using namespace std;
const int N = 2e5 + 10;
const int M = 3e5 + 10;
int n, m, q;

struct edge{
	int x, y, w;
}e[M];
vector<int>g[N];
int p[N];
int val[N];//重构树节点的权值。
int find(int x){
	if(x != p[x])p[x] = find(p[x]);
	return p[x];
}
void kruskal(){
	for(int i = 1; i <= n * 2; i ++){
		p[i] = i;
	}
	sort(e, e + m, [&](edge x, edge y){return x. w > y.w;});
	int id = n;
	for(int i = 0; i < m; i ++){
		int x = e[i].x, y = e[i].y, w = e[i].w;
		
		int px = find(x), py = find(y);
		if(py == px)continue;
		id ++;
		p[px] = id, p[py] = id;
		g[id].push_back(py);
		g[id].push_back(px);
		val[id] = w;
	}
}

int dep[N], fa[N], siz[N];
int top[N], hs[N];
void dfs1(int u, int f){
	dep[u] = dep[f] + 1;
	siz[u] = 1;
	fa[u] = f;
	for(auto s: g[u]){
		if(s == f)continue;
		dfs1(s, u);
		siz[u] += siz[s];
		if(siz[s] > siz[hs[u]])
			hs[u] = s;
	}
}

void dfs2(int u, int t) {
	top[u] = t;
	if(!hs[u])return;
	dfs2(hs[u], t);
	for(auto s: g[u]){
		if(s == fa[u] || s == hs[u])continue;
		dfs2(s, s);
	}
}

int lca(int u, int v){
	while(top[u] != top[v]){
		if(dep[top[u]] < dep[top[v]])
			swap(u, v);
		u = fa[top[u]];
	}
	return dep[u] < dep[v] ? u : v;
}

void solve()
{
	cin >> n >> m >> q;
	for(int i = 0; i < m; i ++){
		cin >> e[i].x >> e[i].y >> e[i].w;
	}
	kruskal();
	for(int i = 1; i <= 2 * n; i ++){
		if(p[i] == i){
			//该连通块中lca的预处理
			dfs1(i, 0);
			dfs2(i, i);
		}
	}

	while(q --){
		int a, b; cin >> a >> b;
		if(find(a) != find(b)){
			cout << -1 << endl;
			continue;
		}
		cout << val[lca(a, b)] << endl;
	}

}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	//cin >> t;
	while(t--)
	solve();
}
相关推荐
逝灮16 分钟前
【蓝桥杯——物联网设计与开发】基础模块8 - RTC
stm32·单片机·嵌入式硬件·mcu·物联网·蓝桥杯·rtc
互联网杂货铺1 小时前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
古木20197 小时前
前端面试宝典
前端·面试·职场和发展
不过四级不改名67712 小时前
蓝桥杯嵌入式备赛教程(1、led,2、lcd,3、key)
stm32·嵌入式硬件·蓝桥杯
TT哇12 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
chengooooooo14 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
测试杂货铺15 小时前
如何用postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·测试工具·职场和发展·jenkins·压力测试·postman
TT哇16 小时前
*【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落
算法·蓝桥杯
撞上电子17 小时前
蓝桥杯物联网开发板硬件组成
物联网·职场和发展·蓝桥杯
pzx_00117 小时前
【LeetCode】LCR 175.计算二叉树的深度
开发语言·c++·算法·leetcode·职场和发展