Luogu1967 NOIP2013 货车运输 最大生成树、倍增
题意:给出一个$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 货车运输 最大生成树、倍增的更多相关文章
- $Noip2013/Luogu1967$ 货车运输 最大生成树+倍增$lca$
$Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的 ...
- 【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...
- TZOJ 4848 货车运输(最大生成树+倍增lca)
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- [noip2013]货车运输(kruskal + 树上倍增)
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- NOIP2013 货车运输(最大生成树,倍增)
NOIP2013 货车运输(最大生成树,倍增) A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道 ...
- [Luogu 1967] NOIP2013 货车运输
[Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...
- NOIP2013 货车运输 (最大生成树+树上倍增LCA)
死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...
- NOIP2013 货车运输
3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...
- Codevs3278[NOIP2013]货车运输
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 ...
随机推荐
- 第二次前端作业grid布局练习
grid布局 CSS Grid(网格) 布局(又称为 “Grid(网格)” ),是一个二维的基于网格的布局系统,它的目标是完全改变我们基于网格的用户界面的布局方式.CSS 一直用来布局我们的网页,但一 ...
- 利用火车头采集A67手机电影教程一
今天将讲述:利用火车头采集A67手机电影,并导入到网站中,如果你要更多更快的教程,请访问:http://www.it28.cn/category-191.html 现在以A67中的电影中的动作片为例: ...
- Oracle 11g数据库详细安装过程
1.Oracle 11g下载 官方网址为:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.h ...
- React数据流和组件间的通信总结
今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...
- python爬虫之Beautifulsoup学习笔记
相关内容: 什么是beautifulsoup bs4的使用 导入模块 选择使用解析器 使用标签名查找 使用find\find_all查找 使用select查找 首发时间:2018-03-02 00:1 ...
- Linux下mysql5.7数据库root登录的问题
本文最后修改时间:20180313 root默认为空密码,默认远程无法登录. mysql5.7更新了user表,网上的方法试了很多,都有点问题 #先停止MySQL服务 $ sudo service m ...
- RTX服务端用户数据迁移说明
步骤一 最好在没有人使用RTX腾讯通的时候,这样你才能保证数据的实时同步;可以在服务器里面把RTX的相关服务器暂停再执行. 步骤二 进入RTX管理器用户数据----导出用户数据---还要把用户照片文件 ...
- Mysql基础之 基础知识解释
Mysql基础知识 RDBMS:关系型数据库管理系统.是将数据组织成相关的行和列的系统 存储过程:是存储在数据库中的一段声明性语句.触发器.java.php等都可以调用其存储过程.早期的mysql版本 ...
- win7 系统中的加密文件打不开了
网友提问:我原来安装的时候win7 32位 旗舰版系统,因为想电脑达到最大运行速度,所以决定把系统重装为64位的win 7系统.[了解win 7 32位于64位的区别]因为重装前未解密bitlocke ...
- oracle使用with as提高查询效率
经常在开发过程中会用到视图或组合查询的情况,但由于涉及表数据经常达到千万级别的笛卡尔积,而且一段查询时会反复调用,但结果输出往往不需要那么多,可以使用with将过滤或处理后的结果先缓存到临时表(此处原 ...