【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值。
显然,经过的路径必然在这张图的最大生成树上。
我们求出这个图的最大生成树后,用st表维护最小值,然后随便倍增下就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#define M 100005
#define INF 19260817
using namespace std; int f[M][]={},minn[M][]={},dep[M]={},vis[M]={};
struct edge{int u,v,next;}e[M*]={}; int head[M]={},use=;
void dfs(int x,int fa,int v){
vis[x]=; f[x][]=fa; dep[x]=dep[fa]+; minn[x][]=v;
for(int i=;i<;i++)
f[x][i]=f[f[x][i-]][i-],minn[x][i]=min(minn[x][i-],minn[f[x][i-]][i-]);
for(int i=head[x];i;i=e[i].next) if(e[i].u!=fa) dfs(e[i].u,x,e[i].v);
}
int getmin(int x,int y){
if(dep[x]<dep[y]) swap(x,y); int res=INF,cha=dep[x]-dep[y];
for(int i=;~i;i--) if(cha&(<<i)) res=min(res,minn[x][i]),x=f[x][i];
for(int i=;~i;i--) if(f[x][i]!=f[y][i]) res=min(res,min(minn[x][i],minn[y][i])),x=f[x][i],y=f[y][i];
if(x==y) return res; return min(res,min(minn[x][],minn[y][]));
} struct bian{
int x,y,z; bian(){x=y=z=;}
friend bool operator <(bian a,bian b){return a.z<b.z;}
}a[M];
void add(int x,int y,int z){use++;e[use].u=y;e[use].v=z;e[use].next=head[x];head[x]=use;}
int fa[M]={};int get(int x){return fa[x]==x?x:fa[x]=get(fa[x]);} int main(){
memset(minn,,sizeof(minn));
int n,m; scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
sort(a+,a+m+);
for(int i=m;i;i--){
int x=get(a[i].x),y=get(a[i].y);
if(x==y) continue;
add(a[i].x,a[i].y,a[i].z);
add(a[i].y,a[i].x,a[i].z);
fa[x]=y;
}
for(int i=;i<=n;i++)
if(!vis[i]) dfs(i,,INF);
int q; scanf("%d",&q);
while(q--){
int x,y; scanf("%d%d",&x,&y);
if(get(x)!=get(y)) printf("-1\n");
else printf("%d\n",getmin(x,y));
}
}
【NOIP2013】货车运输 最大生成树+倍增的更多相关文章
- $Noip2013/Luogu1967$ 货车运输 最大生成树+倍增$lca$
$Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的 ...
- Luogu1967 NOIP2013 货车运输 最大生成树、倍增
传送门 题意:给出一个$N$个节点.$M$条边的图,$Q$次询问,每一次询问两个点之间的所有可行路径中经过的边的边权的最小值中的最大值.$N \leq 10000 , M \leq 50000 , Q ...
- 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 国有 ...
随机推荐
- 关于document.write(来自网络)
对象属性: document.title //设置文档标题等价于HTML的<title>标签document.bgColor / ...
- 2018.06.30 BZOJ3083: 遥远的国度(换根树剖)
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 512 MB Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国 ...
- svn错误:Can't convert string from 'UTF-8' to native encoding
如果文件名包含了中文,当执行"svn up ."遇到如下错误时: svn: Can't convert string from 'UTF-8' to native encoding ...
- Servlet从浅入深
Servlet是什么 servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序). servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端 ...
- 20155302 2016-2017-2 《Java程序设计》第六周学习总结
20155302 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入 ...
- PAT 甲 1005. Spell It Right (20) 2016-09-09 22:53 42人阅读 评论(0) 收藏
1005. Spell It Right (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given ...
- ABP框架中微服务跨域调用其它服务接口
AjaxResponse为ABP自动包装的JSON格式 /// <summary> /// 通过地址和参数取得返回OutPut数据 /// </summary> /// < ...
- VS开发Windows服务
转自:https://www.cnblogs.com/xujie/p/5695673.html
- monoDB环境搭建
最近看到有部分人MongoDB安装之后总是启动不起来,在这里,写了一个简单的搭建教程 直接进入正题 1.mongoDB下载地址 https://www.mongodb.org/downloads#pr ...
- App.config使用方法(基础教程)
WPF程序中的App.config文件是应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,是一种很高效的程序配置方式. 1.首先在工程中配 ...