bzoj3732: Network--kruskal最小生成树+LCA
这是一道写起来比较顺手的题目
没有各种奇怪的细节,基本就是Kruskal和倍增LCA的模板。。
题目大意:对于一个无向带权图,询问两点之间一条路,使得这条路上的最长边最小,输出最小最长边的的值
那么既然要使最长边最短,我们可以先构造一棵最小生成树
由于kruskal已经将边排了序了,所以对于这棵树,每条边都尽量最短了
然后我们再进行lca求出两点路径上的最长边,即为答案
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
;
struct node{
int u,v,cost,next;
}e[maxn*],et[maxn*];
int head[maxn],n,m,K,tot,logn,u,v;
],mx[maxn][];
void insert(int u, int v, int c){
e[++tot].u=u; e[tot].v=v; e[tot].cost=c; e[tot].next=head[u]; head[u]=tot;
}
bool cmp(node a, node b){
return a.cost<b.cost;
}
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
void MST(){
; i<=n; i++) f[i]=i;
; i<=m; i++){
int fx=find(et[i].u), fy=find(et[i].v);
if (fx!=fy){
f[fy]=fx;
insert(et[i].u,et[i].v,et[i].cost);
insert(et[i].v,et[i].u,et[i].cost);
}
}
}
void dfs(int u, int f, int d, int cost){
dep[u]=d; fa[u][]=f; mx[u][]=cost;
; i<=logn; i++) fa[u][i]=fa[fa[u][i-]][i-];
; i<=logn; i++) mx[u][i]=max(mx[u][i-],mx[fa[u][i-]][i-]);
; i=e[i].next)
,e[i].cost);
}
int lca_max(int u, int v){
;
if (dep[u]>dep[v]) swap(u,v);
while (dep[u]<dep[v]){
; i--)
if (dep[u]<dep[fa[v][i]]){
ans=max(ans,mx[v][i]);
v=fa[v][i];
}
ans=max(ans,mx[v][]);
v=fa[v][];
}
if (u==v) return ans;
; i--){
if (fa[u][i]!=fa[v][i]){
ans=max(ans,max(mx[v][i],mx[u][i]));
u=fa[u][i]; v=fa[v][i];
}
}
ans=max(ans,max(mx[u][],mx[v][]));
return ans;
}
int main(){
scanf("%d%d%d", &n, &m, &K);
tot=-; memset(head,-,sizeof(head));
<<logn)<n) logn++;
; i<=m; i++)
scanf("%d%d%d", &et[i].u, &et[i].v, &et[i].cost);
sort(et+,et++m,cmp);
MST();
dfs(,,,);
while (K--){
scanf("%d%d", &u, &v);
printf("%d\n", lca_max(u,v));
}
;
}
bzoj3732: Network--kruskal最小生成树+LCA的更多相关文章
- 【BZOJ3732】 Network Kruskal+倍增lca
Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...
- BZOJ3732: Network(Kruskal重构树)
题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...
- BZOJ 3732 Network Kruskal+倍增LCA
题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...
- BZOJ-3732 Network 图论 最小生成树 倍增
题面 题意:给你N个点,M条边的无向图 (N<=15000,M<=30000)第j条边的长度为 dj (1<=dj<=1e9),然后K个询问 (1<=K<=2000 ...
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 贪心算法(2)-Kruskal最小生成树
什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...
- Prim和Kruskal最小生成树
标题: Prim和Kruskal最小生成树时 限: 2000 ms内存限制: 15000 K总时限: 3000 ms描述: 给出一个矩阵,要求以矩阵方式单步输出生成过程.要求先输出Prim生成过程,再 ...
- [算法系列之二十七]Kruskal最小生成树算法
简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...
- bzoj3732: Network(最小生成树+LCA)
3732: Network 题目:传送门 题解: 第一眼就看到最大边最小,直接一波最小生成树. 一开始还担心会错,问了一波肉大佬,任意两点在最小生成树上的路径最大边一定是最小的. 那么事情就变得简单起 ...
随机推荐
- python 定义实例方法
定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的.除了可以定义实例的属性外,还可以定义实例的方法 ...
- DSP using MATLAB 示例Example2.4
n = [0:10]; x = stepseq(0,0,10) - stepseq(10,0,10); [xe,xo,m] = evenodd(x,n); set(gcf,'Color',[1,1,1 ...
- DSP using MATLAB 示例Example2.3
n = [-10:1:10]; alpha = -0.1+0.3j; % x = exp(alpha*n); % subplot(2,1,1); set(gcf,'Color',[1,1,1]) % ...
- nodejs随记01
EventEmitter var stream = require('stream'); var Readable = stream.Readable; //写入类(http-req就是),初始化时会 ...
- AngularJS $http
$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据.在服务器上读取数据: <div ng-app="myApp" ng-controller=&q ...
- COGS738 [网络流24题] 数字梯形(最小费用最大流)
题目这么说: 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径.规则1:从梯形的 ...
- 使用CSS代码修改博客模板
在修改设置使公告栏里的头像更新为新的头像时发现里边还有“页面定制CSS代码”这一选项,查了一下发现这东西可以对页面做一些个性化的调整.正好目前我使用的这个模板标题和导航栏的字体实在难看,顺手修改了一下 ...
- PHP 将秒数转换成时分秒
将秒数转换成时分秒,PHP提供了一个函数gmstrftime,不过该函数仅限于24小时内的秒数转换.对于超过24小时的秒数,我们应该怎么让其显示出来呢,例如 34:02:02 $seconds = 3 ...
- CUDA程序设计(三)
算法设计:基数排序 CUDA程序里应当尽量避免递归,因而在迭代排序算法里,基数排序通常作为首选. 1.1 串行算法实现 十进制位的基数排序需要考虑数位对齐问题,比较麻烦.通常实现的是二进制位的基数排序 ...
- 封装一个通用递归算法,使用TreeIterator和TreeMap来简化你的开发工作。
在实际工作中,你肯定会经常的对树进行遍历,并在树和集合之间相互转换,你会频繁的使用递归. 事实上,这些算法在逻辑上都是一样的,因此可以抽象出一个通用的算法来简化工作. 在这篇文章里,我向你介绍,我封装 ...