NOIP2013 D1T3 货车运输
[NOIP2013T3]货车运输
背景
noip2013day1
描述
A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重
量限制,简称限重。现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的
情况下,最多能运多重的货物。
输入格式
输入文件第一行有两个用一个空格隔开的整数 n, m, 表示 A 国有 n 座城市和 m 条道
路。
接下来 m 行每行 3 个整数 x、 y、 z,每两个整数之间用一个空格隔开,表示从 x 号城市
到 y 号城市有一条限重为 z 的道路。注意: x 不等于 y,两座城市之间可能有多条道路。
接下来一行有一个整数 q,表示有 q 辆货车需要运货。
接下来 q 行,每行两个整数 x、 y,之间用一个空格隔开,表示一辆货车需要从 x 城市
运输货物到 y 城市,注意: x 不等于 y。
输出格式
输出共有 q 行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货
车不能到达目的地,输出-1。
测试样例1
输入
4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3
输出
3
-1
3
备注
对于 30%的数据, 0 < n< 1,000, 0 < m< 10,000, 0 < q< 1,000;
对于 60%的数据, 0 < n< 1,000, 0 < m< 50,000, 0 < q< 1,000;
对于 100%的数据, 0 < n< 1,000, 0 < m< 50,000, 0 < q< 30,000,0 ≤ z ≤ 100,000。
队长说 也可以用树链剖分写….(可是并不会(。・・)ノ)
// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 105000
int n,m,tot=0,xx,yy,zz;
int first[N],v[N*10],next[N*10],w[N*10],f[N],dep[N],fa[N],size[N],minn[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
struct EDGE{int from,to,weight;}Edge[50500];
void add(int x,int y,int z){w[tot]=z,v[tot]=y;next[tot]=first[x];first[x]=tot++;}
bool cmp(EDGE x,EDGE y){return x.weight>y.weight;}
void dfs(int x){
for(int i=first[x];~i;i=next[i])
if(dep[v[i]]==-1){
dep[v[i]]=dep[x]+1;
fa[v[i]]=x;minn[v[i]]=w[i];
dfs(v[i]);
}
}
void lca(int x,int y){
int ans=0x3fffffff;
if(dep[x]>dep[y])swap(x,y);
while(dep[x]!=dep[y])ans=min(minn[y],ans),y=fa[y];
while(x!=y){
ans=min(ans,min(minn[x],minn[y]));
x=fa[x];y=fa[y];
}
printf("%d\n",ans);
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)size[i]=1;
for(int i=1;i<=n;i++)f[i]=i;
memset(dep,-1,sizeof(dep));
memset(first,-1,sizeof(first));
memset(minn,0x3f,sizeof(minn));
for(int i=1;i<=m;i++){
scanf("%d%d%d",&xx,&yy,&zz);
Edge[i].from=xx;Edge[i].to=yy;Edge[i].weight=zz;
}
sort(Edge+1,Edge+1+m,cmp);
for(int i=1;i<=m;i++){
int fx=find(Edge[i].from),fy=find(Edge[i].to);
if(fx!=fy){
if(size[fx]>size[fy])swap(fx,fy);
f[fx]=fy;size[fy]+=fx;
add(fx,fy,Edge[i].weight);add(fy,fx,Edge[i].weight);
}
}
dep[find(1)]=0;dfs(find(1));
scanf("%d",&m);
while(m--){
scanf("%d%d",&xx,&yy);
if(~dep[xx]&&~dep[yy])lca(xx,yy);
else puts("-1");
}
}
NOIP2013 D1T3 货车运输的更多相关文章
- NOIP2013 D1T3 货车运输 zz耻辱记
目录 先来证明下lemma: 图上2点间最小边权最大的路径一定在MST上 感性理解下: 每次kruskal algo都连接最大的不成环边 此时有2个未联通的联通块被连起来. 那么考虑u, v两点的联通 ...
- NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include &l ...
- xsy 2018 【NOIP2013】货车运输
[NOIP2013]货车运输 Description A 国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有q辆货车在运输货物,司机们想知道每辆车在不超 ...
- 【NOIP2013】货车运输
感觉这题挺水的……真的挺水的…… 原题: A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车 ...
- 【CJOJ1090】【洛谷1967】【NOIP2013】货车运输
题面 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆 ...
- 【NOIP2013】货车运输 最大生成树+LCA
题目描述 AA国有nn座城市,编号从 1到n,城市之间有m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重 ...
- $Noip2013/Luogu1967$ 货车运输 最大生成树+倍增$lca$
$Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的 ...
- [NOIP2013/Codevs3287]货车运输-最小[大]生成树-树上倍增
Problem 树上倍增 题目大意 给出一个图,给出若干个点对u,v,求u,v的一条路径,该路径上最小的边权值最大. Solution 看到这个题第一反应是图论.. 然而,任意路径最小的边权值最大,如 ...
- 【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...
随机推荐
- 时序分析:串匹配-KMP算法
图像处理与模式识别的教科书使用大量的章节来描述空域的模式识别方法.从图像底层特征提取.贝叶斯方法到多层神经网络方法,一般不讨论到对象随时间变化的情况,视频处理应用和在线学习方法使研究对象开始向时域延伸 ...
- java rsa加密解密
- 关于MySQL,Oracle和SQLServer的特点以及之间区别
关系型数据库:是指采用了关系模型来组织数据的数据库.简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织. 非关系型数据库:非关系型数据库严格上说不是 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- springMVC返回汉字字符串乱码,以及返回的字符串乱码的问题
1.springMVC在使用@ResponseBody注解返回字符串为什么出现乱码呢?(这里以spring4.3.1为例) 原因分析:原因在返回字符串时StringHttpMessageConvert ...
- RBM(受限玻尔兹曼机)和深层信念网络(Deep Brief Network)
目录: 一.RBM 二.Deep Brief Network 三.Deep Autoencoder 一.RBM 1.定义[无监督学习] RBM记住三个要诀:1)两层结构图,可视层和隐藏层:[没输出层] ...
- USACO 4.1 Fence Rails
Fence RailsBurch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of his ...
- 多重循环、缓冲区管理、数组(day06)
无法预知的数字叫随机数 rand标准函数可以用来获得随机数 为了使用这个标准函数需要包含stdlib.h头文件 srand标准函数用来设置随机数种子 这个函数把一个整数作为种子使用 不同的种子产生的随 ...
- ecshop中{$lang.}标签的修改
{$lang.}之类的文字都是在语言包里边定义的,所以要修改这些文字的话,我们只需要修改语言包里的文件.首先需要看一下你使用的语言是哪种,如果是中文的话,修改 languages/zh_cn/com ...
- 14.Idea在html里面的快捷键
1.IntelliJ-Idea里常用的快捷键 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 重构-重命名 Ctrl+X 删除行 Ctrl+D 复制行 C ...