传送门

题意:给出一个$N$个节点、$M$条边的图,$Q$次询问,每一次询问两个点之间的所有可行路径中经过的边的边权的最小值中的最大值。$N \leq 10000 , M \leq 50000 , Q \leq 30000$


很套路的题目,没什么好说的,最大生成树上倍增求一段以内的最短边,然后每一次询问跳$LCA$即可。

注意:图可能是不连通的,所以在跳$LCA$之前要判断一下是否在一个连通块内。

 #include<bits/stdc++.h>
 using namespace std;
 inline int read(){
     ;
     char c = getchar();
     while(!isdigit(c))  c = getchar();
     ) + (a << ) + (c ^ ') , c = getchar();
     return a;
 }
 vector < ] , w[];
 ][] , head , depth[] , father[] , dad[] , wei[];
 struct Edge{
     int start , end , w;
 }Ed[];
 bool cmpforEdge(Edge a , Edge b){return a.w > b.w;}
 int find(int a){return father[a] == a ? a : (father[a] = find(father[a]));}
 inline int min(int a , int b){return a < b ? a : b;}
 void LCA(int t , int pa){
     depth[t] = depth[dad[t] = pa] + ;
      ; i < tree[t].size() ; i++)
         if(!depth[tree[t][i]]){
             wei[tree[t][i]] = w[t][i];
             LCA(tree[t][i] , t);
         }
 }
 inline int goLCA(int a , int b){
     ;
     while(a != b)
         if(depth[a] > depth[b]){
             minN = min(minN , wei[a]);
             a = dad[a];
         }
         else{
             minN = min(minN , wei[b]);
             b = dad[b];
         }
     return minN;
 }
 int main(){
     int N = read() , M = read();
      ; i <= N ; i++)   father[i] = i;
      ; i < M ; i++)
         Ed[i].start = read() , Ed[i].end = read() , Ed[i].w = read();
     sort(Ed , Ed + M , cmpforEdge);
      ; i < M ; i++)
         if(find(Ed[i].start) - find(Ed[i].end)){
             father[find(Ed[i].start)] = find(Ed[i].end);
             tree[Ed[i].start].push_back(Ed[i].end);
             tree[Ed[i].end].push_back(Ed[i].start);
             w[Ed[i].start].push_back(Ed[i].w);
             w[Ed[i].end].push_back(Ed[i].w);
         }
     int num = read();
      ; i < num ; i++)  pro[i][] = read() , pro[i][] = read();
      ; i <= N ; i++)
         if(!depth[i]){
             head = ;
             LCA(i , );
              ; j < num ; j++)
                 ])
                     ]) == find(i) && find(pro[j][]) == find(i))
                         pro[j][] = goLCA(pro[j][] , pro[j][]);
                     ]) == find(i) || find(pro[j][]) == find(i))
                         pro[j][] = -;
         }
      ; i < num ; i++)  printf(]);
     ;
 }

Luogu1967 NOIP2013 货车运输 最大生成树、倍增的更多相关文章

  1. $Noip2013/Luogu1967$ 货车运输 最大生成树+倍增$lca$

    $Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的 ...

  2. 【NOIP2013】货车运输 最大生成树+倍增

    题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...

  3. TZOJ 4848 货车运输(最大生成树+倍增lca)

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  4. [noip2013]货车运输(kruskal + 树上倍增)

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  5. NOIP2013 货车运输(最大生成树,倍增)

    NOIP2013 货车运输(最大生成树,倍增) A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道 ...

  6. [Luogu 1967] NOIP2013 货车运输

    [Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...

  7. NOIP2013 货车运输 (最大生成树+树上倍增LCA)

    死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...

  8. NOIP2013 货车运输

    3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...

  9. Codevs3278[NOIP2013]货车运输

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond      题目描述 Description A 国有 ...

随机推荐

  1. 读懂SAP Leonardo物联网平台

    读懂SAP Leonardo物联网平台 https://blog.csdn.net/weixin_42137700/article/details/81903290 本文比较系统.全面地介绍了SAP ...

  2. IDEA项目搭建十——使用slf4j和logback进行日志记录

    .简介 java里面日志分为两部分一个门面.一个实现,我们所熟知的SLF4j.Log4j.Log4j2.Logback的日志组件slf4j是门面提供的统一的入口,具体实现由log4j.log4j2.l ...

  3. ScrollView与ListView的事件冲突

    布局文件 当ListView嵌套在ScrollView中时,会发生冲突,导致ListView控件的拉动效果消失‘ 解决办法: 重写ListView的onTouchEvent(),并在返回前调用getP ...

  4. (网页)Angular.js 中 copy 赋值与 = 赋值 区别

    转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.use ...

  5. 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块

    定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...

  6. MD5生成

    /// <summary> /// 32位MD5加密 /// </summary> /// <param name="input"></p ...

  7. Linux regulator framework(1) - 概述【转】

    转自蜗窝科技:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html 1. 前言 Regulator,中文名翻译为 ...

  8. 机器学习中学习曲线的 bias vs variance 以及 数据量m

    关于偏差.方差以及学习曲线为代表的诊断法: 在评估假设函数时,我们习惯将整个样本按照6:2:2的比例分割:60%训练集training set.20%交叉验证集cross validation set ...

  9. 【Beta Scrum】冲刺! 2/5

    1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 学习java后端登录验证方式,尝试编写登录api N 刚学会springmvc登录token拦截,准备明天登录注册 ...

  10. Beta冲刺! Day3 - 砍柴

    Beta冲刺! Day3 - 砍柴 今日已完成 晨瑶:追查进度:确定推荐算法 昭锡:查看Note模块的处理逻辑.查找主页UI的解决方案 永盛:数据库的大量整合和新建,备份和还原:完成部分新的逻辑 立强 ...