【洛谷P1967】[NOIP2013]货车运输
货车运输
显然,从一点走到另一点的路径中,最小值最大的路径一定在它的最大生成树上
所以要先求出最大生成树,再在生成树上找最近公共祖先,同时求出最小值。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std; const int MAXN = ; int n,m,fa[MAXN],f[MAXN][],deep[MAXN],minn[MAXN][]; bool v[MAXN]; struct Edge{
int x;
int y;
int w;
} e[]; vector<int> son[MAXN],ww[MAXN]; bool cmp(Edge x,Edge y)
{
return x.w>y.w;
} int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
} void init()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
fa[i]=i;
for(int i=;i<=m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].w);
} void unionn(int x,int y)
{
fa[find(x)]=find(y);
} void mst()
{
sort(e+,e++m,cmp);
int t=;
for(int i=;i<=m;i++)
{
int x=e[i].x,y=e[i].y;
if(find(x)!=find(y))
{
unionn(x,y);
t++;
son[x].push_back(y);
ww[x].push_back(e[i].w);
son[y].push_back(x);
ww[y].push_back(e[i].w);
if(t==n-) break;
}
}
} void build(int now,int d)
{
v[now]=;
deep[now]=d;
for(int i=;(<<i)<=deep[now];i++)
{
minn[now][i]=min(minn[now][i-],minn[f[now][i-]][i-]);
f[now][i]=f[f[now][i-]][i-];
}
for(int i=;i<son[now].size();i++)
if(!v[son[now][i]])
{
int u=son[now][i];
minn[u][]=ww[now][i];
f[u][]=now;
build(u,d+);
}
} int lca(int x,int y)
{
int ans=0x7fffffff;
if(deep[x]!=deep[y])
{
if(deep[x]>deep[y]) swap(x,y);
for(int i=;i>=;i--)
if(deep[f[y][i]]>=deep[x])
{
ans=min(ans,minn[y][i]);
y=f[y][i];
}
}
if(x==y) return ans;
for(int i=;i>=;i--)
if(f[x][i]!=f[y][i])
{
ans=min(ans,minn[x][i]);
ans=min(ans,minn[y][i]);
x=f[x][i];
y=f[y][i];
}
ans=min(ans,minn[x][]);
ans=min(ans,minn[y][]);
if(ans==0x7fffffff||ans==)
ans=-;
return ans;
} void work()
{
int q;
scanf("%d",&q);
int x,y;
while(q--)
{
scanf("%d%d",&x,&y);
if(find(x)!=find(y))
printf("-1\n");
else
printf("%d\n",lca(x,y));
}
} int main()
{
init();
mst();
for(int i=;i<=n;i++)
{
if(!v[i])
build(i,);
}
work();
return ;
}
【洛谷P1967】[NOIP2013]货车运输的更多相关文章
- 【题解】【洛谷 P1967】 货车运输
目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...
- 【题解】洛谷P1967 [NOIP2013TG] 货车运输(LCA+kruscal重构树)
洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许 ...
- [洛谷P1967][题解]货车运输
题目 这道题让我们求最小限重的最大值 显然可以先求出最大生成树,然后在树上进行操作 因为如果两点之间有多条路径的话一定会走最大的,而其他小的路径是不会被走的 然后考虑求最小权值 可以采用倍增求LCA, ...
- 洛谷P1967 [NOIP2013提高组Day1T2]货车运输
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...
- [luogu P1967][NOIp2013] 货车运输
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 【洛谷1967】货车运输(最大生成树+倍增LCA)
点此看题面 大致题意: 有\(n\)个城市和\(m\)条道路,每条道路有一个限重.多组询问,每次询问从\(x\)到\(y\)的最大载重为多少. 一个贪心的想法 首先,让我们来贪心一波. 由于要求最大载 ...
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...
- 洛谷 P1967 货车运输
洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...
- 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增
倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...
- [Luogu 1967] NOIP2013 货车运输
[Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...
随机推荐
- robotFramework 读取Excel文件
1.Robotframework读取Excel文件 第一步:先安装ExcelLibrary 可以直接通过命令安装:pip install robotframework-ExcelLibrary 安装完 ...
- spark第一篇:RDD Programming Guide
预览 在高层次上,每一个Spark应用(application)都包含一个驱动程序(driver program),该程序运行用户的主函数(main function),并在集群上执行各种并行操作. ...
- 持久层框架---jdbc
1.JDBC编程步骤: 1.1 加载数据库驱动: 1.2 获取数据库连接: 1.3 通过Connection对象创建Statement对象: 1.4 使用Statement对象执行SQL语句: 1.5 ...
- Perf -- Linux下的系统性能调优工具,第 2 部分 特殊用法以及内核调优示例
https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/ 本文内容简介 之前介绍了 perf 最常见的一些用法,关注于 Linux 系统上应用程序 ...
- [转]js add month 加n月
本文转自:http://stackoverflow.com/questions/5645058/how-to-add-months-to-a-date-in-javascript/5645126 I ...
- 在oracle RAC 环境下用 PL/SQL Developer debug procedure 出现 hang 的情况
现象描述: 用plsql developer 连接编译procedure 的时候都很正常.一旦开始Test进入Debug模式的时候就Hang住了. 初步猜测是没有权限,可是是DBA角色呀,如果没有权限 ...
- 链表例题2:链表的倒数第k个节点是多少
解题思想: 1.创建一个结点类(为后面实现链表做基础) 2.创建一个查询倒数元素的方法 3.使用快慢指针的思想(主要的部分) 图中的表示的是查询倒数第k个结点的操作: 创建一个快慢指针后pre(慢指针 ...
- mybatis批量插入insert时报错
报错信息: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.此 RPC 请求中提供了过多的参数.最多应为2100 错误分析: 由于mybatis拼接的sql语句参数过多导致 解决办法 ...
- 从零开始的全栈工程师——js篇2.18(js的运动)
一.元素的 client offset scroll 三个系列 clientWidth / clientHeight / clientTop / clientLeftoffsetWidth / off ...
- react-router + redux + react-redux 的例子与分析
一个 react-router + redux + react-redux 的例子与分析 index.js import React from 'react' import ReactDom fr ...