【洛谷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 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...
随机推荐
- javascript里label语句的简单示例
在javascript中,我们可能很少会去用到 Label 语句,但是熟练的应用 Label 语句,尤其是在嵌套循环中熟练应用 break, continue 与 Label 可以精确的返回到你想要的 ...
- DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配
DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成 ...
- Maven使用之packing篇
项目的打包类型:pom.jar.war 项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系.项目模块化可以将通用的部分抽离出来,方便重 ...
- 百度webuploader 上传演示例子
前端代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="baiduWebU ...
- Appium自动化中截图的问题
在用Appium做UI自动化过程中,大家会发现测试报告很重要,而在测试报告中截图很重要. 因为很多公司都是用Jenkins作为持续集成工具,所以要让执行自动化测试的人看明白自动化在跑什么,哪里失败了, ...
- red5服务器基础之red5环境的安装配置
red5的官网地址http://red5.org/ 下载完成之后解压 在系统变量配置RED5_HOME 在浏览器里输入 http://localhost:5080/ 配置ip地址在安装目录D:\red ...
- Docker Ubuntu/CentOS 下运行 java jar
官方安装方法 https://docs.docker.com/engine/installation/linux/ubuntu/ Ubuntu安装包 https://download.docker.c ...
- caffe学习资料
1.利用Caffe做回归(regression) http://www.cnblogs.com/frombeijingwithlove/p/5314042.html
- LeanTouch控制移动
Lean_Touch控制移动 using UnityEngine; using System.Collections; using System.Collections.Generic; using ...
- [转]jQueryUI中Datepicker(日历)插件的介绍和使用
http://jqueryui.com/datepicker/ 本文转自:http://blog.csdn.net/redarmy_chen/article/details/7400571 jQuer ...