当前位置: 首页 > 编程日记 > 正文

题解 UVA11354 【Bond】

并查集+按秩合并

传送门

大意:给出一张n个点m条边的无向图, 每条边有一个权值,有q个询问, 每次给出两个点s、t,找一条路, 使得路径上的边的最大权值最小。

我们可以发现,跑最小生成树会跑挂, 那么任意两点, 在生成树上有唯一路径, 而且这条路径上的最大危险值一定最小。 但是每次询问最大复杂度O(n), 那么复杂度高达O(n^2)。 我们知道, 并查集在用了路径压缩之后效率高达O(n), 但是却破坏了树形结构, 所以不能用路径压缩。 然而仅仅靠按秩合并, 复杂度也可低至O(logn)。 因此我们只需按秩合并, 然后询问的时候向根回溯就行了, 复杂度mlogn。

#include<cstdio>
#include<cctype>
#include<algorithm>
#include<cstring>
#define R register int
using namespace std;
const int N=50010;
int f[N],rk[N],w[N],wi[N];
int n,m,t,u,v,cs;struct edge{int u,v,w;
}e[N];inline bool cmp(const edge& x,const edge& y) {return x.w<y.w;}void init() {for(R i=0;i<=n;i++) f[i]=i,rk[i]=0,w[i]=0;}inline int getf(int i) {return f[i]==i?i:getf(f[i]);}inline void merge(int u,int v,int wi)
{u=getf(u),v=getf(v);if(u==v) return ;if(rk[u]<rk[v]) f[u]=v,w[u]=wi;else {f[v]=u,w[v]=wi;if(rk[u]==rk[v]) rk[u]++;}
}inline int solve(int u,int v)
{for(R i=0;i<=n;i++) wi[i]=0;R ans=1,ans1=0;while(1) { wi[u]=ans; if(f[u]==u) break; ans=max(ans,w[u]),u=f[u];}while(1)if(wi[v]) {ans1=max(ans1,wi[v]); break;}else if(f[v]==v) break;else ans1=max(ans1,w[v]),v=f[v];    return ans1;
}int main()
{while(scanf("%d%d",&n,&m)==2){if(cs++) putchar('\n');init();for(R i=1;i<=m;i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sort(e+1,e+m+1,cmp);for(R i=1;i<=m;i++) merge(e[i].u,e[i].v,e[i].w);scanf("%d",&t);while(t--){scanf("%d%d",&u,&v);printf("%d\n",solve(u,v));}    }return 0;
}

转载于:https://www.cnblogs.com/Jackpei/p/10381419.html

相关文章:

管理 zabbix_Zabbix 2019 峰会丨看睿象云如何在 Zabbix 中玩转告警

2019年11月29日-30日&#xff0c;为期两天的 Zabbix 大会中国站在北京盛大召开&#xff0c;本届 Zabbix 大会以“新视界&#xff0c;新技术&#xff0c;共建未来新监控!”为主题&#xff0c;为与会人员提供前沿的监控技术学习&#xff0c;多元的行业案例讲解&#xff0c;以及现…

Oracle存储过程返回游标实例详解

复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR2, P_RECEIVER VARCHAR2, P_SERVER VARCHAR2, P_PORT NUMBER DEFAULT 25, P_NEED_SMTP INT DEFAULT 0, P_USER VARCHAR2 DEFAULT NULL, P_PASS VARCHAR2 DEFAUL…

03 Django REST Framework 视图和路由

01-DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类&#xff0c;实现了很多方便的功能--如请求数据解析和认证等。 比如&#xff0c;区别于Django中的request从request.GET中获取URL参数&#xff0c;从request.POST中取某些情况下的POST数据…

[Quick-x]制作新手引导高亮区域方法之二:裁剪模式

demo下载&#xff1a;https://github.com/chenquanjun/Quick-x-HighlightArea 2、裁剪模式 (1)创建裁剪对象 local bgColor ccc3(255, 0, 0) --非高亮区域颜色local bgOpacity 0.6 --非高亮区域透明度local layerColor CCLayerColor:create(ccc4(bgColor.r, bgColor.g, bgCo…

单一窗口关区备案_单一窗口税费支付权限管理

企业需先使用法人卡登录“单一窗口”税费支付系统进行业务权限授权后&#xff0c;才可以使用操作员卡查询、支付、打印税单等。“业务权限授权”模块提供税费支付企业相关业务权限(关区、协议)的授权功能。使用“单一窗口”税费支付系统的部门、用户、角色管理与权限配置等操作…

每日一题题目29:五个数字能组成多少互不重复的四位数

#有五个数字&#xff1a;1、2、3、4、5&#xff0c;能组成多少个互不相同且无重复数字的四位数&#xff1f;各是多少&#xff1f; e [] for a in range(1,6):for b in range(1,6):for c in range(1,6):for d in range(1,6):if a!b and a!c and a!d and b!c and b!d and c!d:e.a…

读书:历史 -- 空王冠

15世纪50到80年代的玫瑰战争&#xff0c;短短30年间王冠易手7次&#xff0c;成千上万人死于战乱。这段时期&#xff0c;可以算得上英国历史上最混乱、最残暴的历史时期。 英国统治时间最长的金雀花王朝分崩离析&#xff0c;被都铎王朝取代。

机器人香囊_青少年智能机器人等级评定~户外营~圆满结束!

2020暑期田园探秘~青少年智能机器人等级评定户外营在8月3日至7日短暂而愉快的欢乐时光中圆满结束了让我们一起来回顾一下这愉快、欢乐、体验成长的时光孩子们在激动的心情下踏上了探秘的欢快路途......初到营地的第一件事~组建团队~首先让大家见识一下我们的团队我们的团队由&a…

Linux下DB2数据库安装教程

最近因为工作需要在学习DB2数据库&#xff0c;本教程讲解DB2数据库在inux下的安装步骤。 安装前请查看 DB2版本和许可证 说明来增加了解&#xff0c;先弄明白改安装什么版本&#xff0c;这里我用的是最新的Express-C版本&#xff0c;这个版本是提供给个人学习用的版本。 管理客…

Ubuntu 13.04 安装 OpenCV 及试用

2019独角兽企业重金招聘Python工程师标准>>> 暑假来了&#xff0c;项目需要&#xff0c;得学习一下 OpenCV。 首先&#xff0c;是安装问题。我是参照这个网址安装的&#xff1a;http://karytech.blogspot.com/2012/05/opencv-24-on-ubuntu-1204.html&#xff08;在…

Python3 调试技巧 —— 死循环

说下Python3不使用gdb的自身调试 前情提要&#xff1a;服务器莫名卡死&#xff0c;用网上的方法用gdb&#xff0c;下载了很多组件&#xff0c;包括那个libpython.py&#xff0c;都没什么用&#xff0c;看不到堆栈&#xff0c;也试了保存core文件等等 大事找官方&#xff1a;官方…

读书:历史 -- 奥斯曼帝国六百年

作者&#xff1a;帕特里克贝尔福 &#xff0c;英国历史学家、作家、记者。 本书为作者写作生涯的集大成之作&#xff0c;也是最终之作 一部奥斯曼帝国通史&#xff1a; 伊斯兰教大帝国的兴起、转折、衰败和灭亡 奥斯曼帝国的发家史和我们的大清帝国十分相似&#xff0c;两者都…

单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器

http://www.amobbs.com/thread-4503884-1-1.html 这个小玩意&#xff0c;采用 ATMEL 的传统51MCU作主控制芯片&#xff0c;加上SD卡和显示屏&#xff0c;就可以作简单的音乐播放器了&#xff0c;虽然音质不怎么样&#xff0c;不过作为DIY还是蛮有乐趣&#xff0c;希望大家喜欢。…

不带头节点的链表有哪些缺点_23张图!万字详解「链表」,从小白到大佬!

链表和数组是数据类型中两个重要又常用的基础数据类型。数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通过下标迅速的找到元素的位置&#xff0c;而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动&#xff0c;为了解决和平衡此问题于是就有了链表…

劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)

《写给大家看的C语言书(第2版)》是邮电社图灵公司引进翻译的一本C语言入门书&#xff0c;这是一本垃圾书。搞不清图灵为什么引进了这样一本垃圾书。该书作者基本不懂得C编程技术&#xff0c;书中误导、错谬比比皆是。  该书的附录B给出了一个21点游戏的代码&#xff0c;这是一…

【数学 技巧】2.14计数

有趣的组合数学题&#xff1b;考试时候打满确实挺不容易的…… 题目描述 对于一个 $n$ 阶排列 $p$&#xff0c;我们建立一张无向简单图 $G(p)$&#xff0c;有 $n$ 个节点&#xff0c;标号从 $1$ 到 $n$&#xff0c;每个点向左右两侧最近的比它大的点以及比它小的点连边。 形式化…

冒泡排序 算法

算法思路&#xff1a; 从第一个元素开始遍历&#xff0c;比较当前元素和下一个元素的大小不符合&#xff0c;则交换结束最后一个元素&#xff0c;则重新遍历 实现&#xff1a; void bubble_sort(vector<int> &arr) {for (int i 0;i < arr.size() - 1; i) {//交…

5单个编译总会编译全部_5分钟读懂JavaScript预编译

大家都知道JavaScript是解释型语言&#xff0c;既然是解释型语言&#xff0c;就是编译一行&#xff0c;执行一行&#xff0c;那又何来预编译一说呢?脚本执行js引擎都做了什么呢&#xff1f;今天我们就来看看吧。1-JavaScript运行三部曲语法分析预编译解释执行语法分析很简单&a…

2014百度面试题目---“求比指定整数大且最小的不重复数”解答

题目&#xff1a;给定任意一个正整数&#xff0c;求比这个数大且最小的“不重复数”&#xff0c;“不重复数”的含义是相邻两位不相同&#xff0c;例如1101是重复数&#xff0c;而1201是不重复数。 代码&#xff1a; #include <iostream> using namespace std;bool istha…

3DMAX 批量 场景 对象 导出 .X格式 脚本

一、首先你需要下载一个 Total Commader文件管理软件。利用这个软件你可以收集文件夹下包含子文件夹下的max文件&#xff08;或完整路径&#xff09;打开TotalCMD后使用查找文件&#xff1a;&#xff08;如图红框中的操作&#xff09;1.2.3. 复制文件名和完整路径后粘贴到文本文…

C++复数类面向对象的参考

#include <bits/stdc.h> #include <future> #include <thread>using namespace std;class Complex { public:Complex (double r 0, double i 0): re (r), im (i) {} ///冒号后面是初始化的过程&#xff0c;注意分清初始化和赋值的区别Comp…

快速排序 算法

算法思路 序列终任意选择一个数&#xff0c;把序列分为比这个数大和比这个数小的两个子序列不断重复以上步骤(递归) 代码实现 int partition1(vector<int> &arr, int begin , int end) {int ret arr[begin];int index begin 1;for (int i index;i < end; i…

利用Spring AOP与JAVA注解为系统增加日志功能

Spring AOP一直是Spring的一个比较有特色的功能&#xff0c;利用它可以在现有的代码的任何地方&#xff0c;嵌入我们所想的逻辑功能&#xff0c;并且不需要改变我们现有的代码结构。 鉴于此&#xff0c;现在的系统已经完成了所有的功能的开发&#xff0c;我们需要把系统的操作日…

maven引入hadoop_如何添加Hadoop依赖通过Maven

匿名用户1级2017-09-09 回答Hadoop开发中需要用到至少不下10个的依赖包&#xff0c;它们相互间的依赖关系比较复杂&#xff0c;不同版本的依赖关系也有所不同&#xff0c;而间接依赖导致的程序错误并不会在运行之前报错&#xff0c;因此确定适合一个版本的依赖包&#xff0c;会…

js 闭包作用

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的作用域 要理解闭包&#xff0c;首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种&#xff1a;全局变量和局部变量。 Javascript语言的特殊之处&#xff0c;就在于函数内部可以直接读取全…

vue实用组件——页面公共头部

可伸缩自适应的页面头部&#xff0c;屏幕适应范围更广泛 效果如下&#xff1a; 代码如下&#xff1a; <template> <div class"site-header"> <div class"logo"><img src"/assets/icons/logo.png" alt"">&…

插入排序 算法

算法思路 维护一段有序数列同时遍历待排序数列&#xff0c;在有序数列中找到合适的位置插入元素 基本代码 实现如下: void insertion(vector<int>& arr){for(int i1;i<arr.size();i){int tempi;for(int ji-1;j>0;j--){//有序序列不断得增加if(arr[temp]<…

线段树入门【转】

文章来自 &#xff1a; http://blog.csdn.net/x314542916/article/details/7837276 学习算法&#xff0c;自己收藏着。 线段树的入门级 总结 线段树是一种二叉搜索树&#xff0c;与区间树相似&#xff0c;它将一个区间划分成一些单元区间&#xff0c;每个单元区间对应线段树中的…