BZOJ 3732 Network Kruskal+倍增LCA

博客内容讲述了如何使用最小生成树和倍增LCA算法解决无向连通图中k次询问两点间路径上最大边的最小值问题。在NOIP2013货车运输题目中,通过构建最小生成树,并结合倍增LCA算法,可以高效地找到路径上的最大权值。
摘要由CSDN通过智能技术生成

题目大意:给定一个n个点m条边的无向连通图,k次询问两点之间所有路径中最长边的最小值

NOIP2013 货车运输,几乎就是原题。。。只不过最小边最大改成了最大边最小。。。

首先看到最大值最小第一反应二分答案 但是二分答案O(kmlogn)明显做不了 这里我们考虑最小生成树

先生成一棵最小生成树,然后每次询问利用倍增LCA求出路径上的最大权值即可

本蒟蒻居然把LCA写挂了。。。 而且样例还过了。。。 伤不起啊。。。

90%达成 剩下一道刷点啥呢。。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct edge{
	int x,y,f;
	bool operator < (const edge &y) const
	{
		return f < y.f;
	}
}edges[30300];
struct abcd{
	int to,f,next;
}table[30300];
int head[15100],tot;
int n,m,k;
int fa[15100][20],f_max[15100][20],dpt[15100];
int belong[15100];
int find(int x)
{
	if(!belong[x]||belong[x]==x)
		return belong[x]=x;
	return belong[x]=find(belong[x]);
}
void add(int x,int y,int z)
{
	table[++tot].to=y;
	table[tot].f=z;
	table[tot].next=head[x];
	head[x]=tot;
}
void dfs(int x)
{
	int i;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值