传送门

题意:给出一个$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. python之继承

    1.经典MRO : 树形结构的深度遍历优先 - > 树形结构遍历 class A: pass class B(A): pass class C(A): pass class D(B, C): p ...

  2. 获取url参数的方法(web)

    //获取url参数的方法(web) function GetQueryString(name) {     var reg = new RegExp("(^|&)" + n ...

  3. Apex计划作业框架的实现

    Apex计划作业框架的实现 在本文中,我们实现一个简单的"计划作业框架",用于实现数据的定时自动处理. Apex相关接口 Apex中提供了一组接口用来实现数据的处理.我们主要使用以 ...

  4. 安卓开发_计时器(Chronometer)的简单使用

    计时器控件(Chronometer)是一个可以显示从某个起始时间开始一共过去多长时间的本文. 继承自TextView,以文本的形式显示时间内容 该组件有五个方法 1.setBase(): \\用于设置 ...

  5. Linux下修改IP、DNS、路由命令行设置

    本文最后修改时间:20180313 一.快速修改,重启后设置就没了 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add defa ...

  6. 慕学在线网0.2_users表设计(1)

    1.Django App设计: users-用户管理(任何web中,users表都是第一个被设计的) course-课程管理 organization-机构和教师管理 operation-用户操作管理 ...

  7. Info.plist的CFBundleIdentifier、CFBundleName、BundleDisplayName

    plist关键字段: CFBundleIdentifier:应用包名.唯一标识 CFBundleVersion:文件版本号,可以每次发版本递增 CFBundleShortVersionString:a ...

  8. 使用wxpy自动发送微信消息(加强版)

    通过使用wxpy自动发送微信消息后,笔者又加强了发送消息,堪称消息爆炸式发送 目前设置的为10秒发送一次,发送9次,每次发送10条内容 import requests import wxpy from ...

  9. V4L2 driver -整体架构

    我的uvc开源地址:gitee-uvc 字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间. V4L2 驱动核心:主要是构建一个内核中标准视频设备驱动的框架 ...

  10. 【PAT】B1043 输出PATest(20 分)

    /* */ #include<stdio.h> #include<algorithm> #include<string.h> #include<ctype.h ...