Uva 11354 LCA 倍增祖先

题目链接:https://vjudge.net/contest/144221#problem/B

 

题意:找一条从 s 到 t  的路,使得瓶颈路最小。

点的数目是10^4,如果向之前的方案求 maxcost数组,O(n*n)时间是过不了的,这个时候,用到了增倍祖先。

关于倍增祖先:http://m.w2bc.com/article/177601

我要补充的是,倍增祖先的优点,是在于倍增,他写的案例,没有体现出倍增,这里强调一下。有点像二分的思想;

 

利用倍增祖先初始化maxcost[i][j]数组,maxcost[i][j] 在倍增祖先里面表示的,结点 i 的第2j级祖先之间的瓶颈。

用O(nlogn)初始化,然后,查询是O(logn)。

#include <bits/stdc++.h>
using namespace std;const int maxn = 50000 + 10;
const int INF = 0x3f3f3f3f;
const int logmaxn = 20;int n,m;struct Edge
{int u,v,d;bool operator < (const Edge& rhs) const{return d < rhs.d;}
};Edge e[maxn];int pa[maxn];int Find_Set(int x)
{if(x!=pa[x])pa[x] = Find_Set(pa[x]);return pa[x];
}vector<int> G[maxn],C[maxn];struct LCA
{int n;int fa[maxn];int cost[maxn];int L[maxn];int anc[maxn][logmaxn];int maxcost[maxn][logmaxn];void preprocess(){for(int i=0; i<n; i++){anc[i][0] = fa[i];maxcost[i][0] = cost[i];for(int j=1; (1<<j)<n; j++)anc[i][j] = -1;}for(int j=1; (1<<j)<n; j++){for(int i=0; i<n; i++){if(anc[i][j-1]!=-1){int a = anc[i][j-1];anc[i][j] = anc[a][j-1];maxcost[i][j] = max(maxcost[i][j-1],maxcost[a][j-1]);}}}}int query (int p,int q){int log;if(L[p]<L[q]) swap(p,q);for(log=1; (1<<log)<=L[p]; log++);log--;int ans = -INF;for(int i=log; i>=0; i--){if(L[p]-(1<<i)>=L[q]){ans = max(ans,maxcost[p][i]);p = anc[p][i];}}if(p==q) return ans;        //lca 是 pfor(int i=log; i>=0; i--){if(anc[p][i]!=-1&&anc[p][i]!=anc[q][i]){ans = max(ans,maxcost[p][i]);p = anc[p][i];ans = max(ans,maxcost[q][i]);q = anc[q][i];}}ans = max(ans,cost[p]);ans = max(ans,cost[q]);return ans;//LCA 是 fa[p] = fa[q];
    }};LCA solver;void dfs(int u,int fa,int level)
{solver.L[u] = level;for(int i=0; i<G[u].size(); i++){int v = G[u][i];if(G[u][i]!=fa){solver.fa[v] = u;solver.cost[v] = C[u][i];dfs(G[u][i],u,level+1);}}
}int main()
{//freopen("in.txt","r",stdin);int kase = 1;while(scanf("%d%d",&n,&m)==2&&n){for(int i=0; i<m; i++){int u,v,d;scanf("%d%d%d",&u,&v,&d);u--;v--;e[i] = (Edge){u,v,d};}sort(e,e+m);for(int i=0; i<n; i++){pa[i] = i;G[i].clear();C[i].clear();}for(int i=0; i<m; i++){int u = e[i].u;int v = e[i].v;int fx = Find_Set(u);int fy = Find_Set(v);if(fx!=fy){pa[fx] = fy;G[u].push_back(v);C[u].push_back(e[i].d);G[v].push_back(u);C[v].push_back(e[i].d);}}solver.n = n;dfs(0,-1,0);solver.preprocess();if(kase++!=1)puts("");int Q;scanf("%d",&Q);while(Q--){int u,v;scanf("%d%d",&u,&v);u--;v--;printf("%d\n",solver.query(u,v));}}return 0;
}

 

转载于:https://www.cnblogs.com/TreeDream/p/6146513.html

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

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

相关文章

Nginx搭建flv视频点播服务器

Nginx搭建flv视频点播服务器前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看视频时肯定不流畅, 而且用户不能向前拖放, 用户体验很不好. 如果视频限速的速率很大或…

编码拾遗

1 #!/usr/bin/env python32 #-*- coding:utf-8 -*-3 4 Administrator 5 2018/8/16 6 7 8 # fopen("demo","r",encoding"utf8")9 # dataf.read() 10 # print(data) 11 # f.close() 12 13 14 # print("沈哲子") 15 16 s"中国&qu…

Xcode:Foundation框架找不到,或者是自动提示出现问题

问题描述&#xff1a;Foundation框架找不到&#xff0c;或者是自动提示出现问题 之前的操作&#xff1a;手贱&#xff0c;不少心把编译器里面的源码改了处理办法&#xff1a;清理缓存缓存位置&#xff1a;点击桌面后&#xff0c;选择系统菜单栏&#xff1a;前往—电脑—硬盘—用…

mybatis 不生效 参数_Mybatis-日志配置

日志Mybatis 的内置日志工厂提供日志功能&#xff0c;内置日志工厂将日志交给以下其中一种工具作代理&#xff1a;SLF4JApache Commons LoggingLog4j 2Log4jJDK loggingMyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺…

PS通过滤色实现简单的图片拼合

素材如下&#xff1a; 素材一&#xff1a; 雪山 素材二&#xff1a; 月亮 效果&#xff1a; 实现步骤 1、在PS中打开雪山素材一 2、将月亮素材直接拖入雪山所在的图层中 3、锁定置入素材的高宽比&#xff08;点击一下链状按钮&#xff09; 4、调整月亮到合适大小合适位置 5、…

预处理:主成分分析与白化

主成分分析 引言 主成分分析&#xff08;PCA&#xff09;是一种能够极大提升无监督特征学习速度的数据降维算法。更重要的是&#xff0c;理解PCA算法&#xff0c;对实现白化算法有很大的帮助&#xff0c;很多算法都先用白化算法作预处理步骤。 假设你使用图像来训练算法&#x…

jQuery Ajax

jQuery load()方法&#xff1a;是简单但强大的Ajax 方法load() 方法从服务器(URL,data,callback);必须的URL 参数规定您希望架加载的URL可选的data参数 规定与请求一同发送的差字符串键/值对集合。可选的callback参数时load()方法完成后所执行的函数名称$(documnet).ready(…

swagger 修改dto注解_Web服务开发:Spring集成Swagger,3步自动生成API文档

目录&#xff1a;1&#xff0c;Spring Boot集成Swagger2&#xff0c;Swagger接口文档页面3&#xff0c;常见问题和解决方法在Sping开发REST接口服务时&#xff0c;API文档是不可缺少的一个重要部分。Swagger框架定义了完整的REST接口文档规范&#xff0c;提供了强大的页面测试功…

WPF自定义控件之列表滑动特效 PowerListBox

列表控件是应用程序中常见的控件之一&#xff0c;对其做一些绚丽的视觉特效&#xff0c;可以让软件增色不少。 本人网上看过一个视频&#xff0c;是windows phone 7系统上的一个App的列表滚动效果&#xff0c;效果非常炫 现在在WPF上用ListBox重现此效果 首先我们来分析一下&am…

去除inline-block元素间间距

根本原因&#xff1a;inline-block元素之间之所以有空白间距是因为空格有字体大小原因。 第一种&#xff1a; 把代码之间的换行空白都去掉。 例如&#xff1a; <div>第一个inline-block元素</div><div>第二个inline-block元素</div> 第二种&#xff1a…

python - 定时清理ES 索引

只保留三天 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import datetime# 时间转化为字符串now_time datetime.datetime.now().strptime(datetime.datetime.now().strftime("%Y.%m.%d"),"%Y.%m.%d") os.system("curl -XGET http://12…

CnosDB如何确保多步操作的最终一致性?

背景 在时序数据库中&#xff0c;资源的操作是一个复杂且关键的任务。这些操作通常涉及到多个步骤&#xff0c;每个步骤都可能会失败&#xff0c;导致资源处于不一致的状态。例如&#xff0c;一个用户可能想要在CnosDB集群中删除一个租户&#xff0c;这个操作可能需要删除租户…

颈椎前路caspar撑开器_“骨质增生”导致的颈椎病怎么破?

来源&#xff1a;《脊柱外科微创手术精要》作者&#xff1a;中日友好医院 邹海波此文是区别于颈椎间盘软性突出诊治一文&#xff0c;主要针对“骨质增生”导致的颈椎病(Spondylosis)进行介绍。传统的颈椎前路手术主要为颈椎病而设计。一度认为对颈椎病采用前路手术的主要好处在…

Struts2整合Freemarker生成静态页面

2019独角兽企业重金招聘Python工程师标准>>> 这是生成静态页面的预览&#xff1a; 其对应的模板文件&#xff1a; <table style"text-align:center;FONT-SIZE: 11pt; WIDTH: 600px; FONT-FAMILY: 宋体; BORDER-COLLAPSE: collapse" borderColor#3399ff…

使用flot.js 发现x轴y轴无法显示轴名称

添加此插件解决问题 flot-axislabels https://github.com/markrcote/flot-axislabels 转载于:https://www.cnblogs.com/feehuang/p/4993920.html

快速幂、矩阵快速幂、快速乘法

快速幂 快速幂是我们经常用到的一种算法&#xff0c;快速幂顾名思义就是快速的幂运算。我们在很多题目中都会遇到幂运算&#xff0c;但是在指数很大的时候&#xff0c;我们如果用for或者是pow就会超时&#xff0c;这时候就用到了快速幂。 快速幂的原理就是&#xff0c;当求b^p的…

vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)

完整项目地址&#xff1a;vue-element-adminhttps://github.com/PanJiaChen/vue-element-admin前言拖更有点严重&#xff0c;过了半个月才写了第二篇教程。无奈自己是一个业务猿&#xff0c;每天被我司的产品虐的死去活来&#xff0c;之前又病了一下休息了几天&#xff0c;大家…

注释工具_苹果已购丨Notability丨功能强大而简单易用的笔记及PDF注释工具

点击上方“天泽黑科技”右上角“...”点选“设为星标”点击加星★ 贴近你心 ❤今天给大家购买效率类排行第3名的 Notability &#xff01;大家在桌面 App store 登陆我的账号&#xff0c;搜索下载即可&#xff01;荣获 iPad、iPhone 和 Mac 的 Apple「编」爱新 App 殊荣&#x…

第四章 大网高级   NSSA

STUB、完全stub、NSSA、完全nssa实验要求&#xff1a;1、配置IP地址2、配置OSPF多区域3、配置 stub 末梢区域4、配置完全stub末梢区域5、配置 nssa 非纯末梢区域6、配置完全nssa非纯末梢区域7、配置两种协议相互注入重分发8、实现全网互通一、配置OSPF多区域二、配置rip v2三、…

[AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展

[AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展 健康模型扩展 第一部分已经介绍了AlwayOn健康模型的概述。现在是创建一个自己的PBM策略&#xff0c;然后设置为制定的归类。创建这些策略&#xff0c;创建之后修改一下配置&#xff0c;dashboard就会自动评估这些策略…