货车运输

题目链接

显然,从一点走到另一点的路径中,最小值最大的路径一定在它的最大生成树上

所以要先求出最大生成树,再在生成树上找最近公共祖先,同时求出最小值。

 #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]货车运输的更多相关文章

  1. 【题解】【洛谷 P1967】 货车运输

    目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...

  2. 【题解】洛谷P1967 [NOIP2013TG] 货车运输(LCA+kruscal重构树)

    洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许 ...

  3. [洛谷P1967][题解]货车运输

    题目 这道题让我们求最小限重的最大值 显然可以先求出最大生成树,然后在树上进行操作 因为如果两点之间有多条路径的话一定会走最大的,而其他小的路径是不会被走的 然后考虑求最小权值 可以采用倍增求LCA, ...

  4. 洛谷P1967 [NOIP2013提高组Day1T2]货车运输

    P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...

  5. [luogu P1967][NOIp2013] 货车运输

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  6. 【洛谷1967】货车运输(最大生成树+倍增LCA)

    点此看题面 大致题意: 有\(n\)个城市和\(m\)条道路,每条道路有一个限重.多组询问,每次询问从\(x\)到\(y\)的最大载重为多少. 一个贪心的想法 首先,让我们来贪心一波. 由于要求最大载 ...

  7. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

  8. 洛谷 P1967 货车运输

    洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...

  9. 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增

    倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...

  10. [Luogu 1967] NOIP2013 货车运输

    [Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...

随机推荐

  1. STL effectiv 条款7 复习 未完成

    该条款很好的解决了  容器中存放指针释放的问题,for_each函数调用可以参考自己的前面的博客 为什么会有这个条款呢 很多时候 我们将new过的指针存放到容器中,我们有时候错误的认为  容器对象析构 ...

  2. Django开发常见问题

    1.Django设置中文,和时区.静态文件指向 #========================================================== # 设置时区 注意注释上面的:L ...

  3. Java基础05-运算符

    1.赋值运算符:= 2.算术运算符: (1)一元运算符: i++;先使用后自身加1  int i=1;int b=i+1; b=1  i=2 ++i;先对自身加1后使用 int j=1;int b=+ ...

  4. android shape.xml 属性详解

    转载源:http://blog.csdn.net/harvic880925/article/details/41850723 一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标 ...

  5. Supervised learning demo

    监督学习案例 规范 假设函数: 使用h(hypothesis, 假设)表示 输入(input value) 向量或者实数: 使用小写字母x等 矩阵: 使用大写字母X等 输出(output value) ...

  6. Unity 滚轮实现UGUI ScrollView的缩放

    本文原创,转载请注明出处http://www.cnblogs.com/AdvancePikachu/p/7908754.html 前段时间在做一个类似AnimationCurve的可视化编辑器,其中在 ...

  7. JDBC之Java连接mysql实现增删改查

    使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...

  8. Spring-cloud微服务 Eureka学习教程-分布式搭建EurekaServer、EurekaClient(中级)

    我们这里只有一台服务器,所以我们先仿集群搭建. 完整demo项目代码:https://github.com/wades2/EurekaDemo2 在这之前我们先分析分析Eureka相比其他注册中心的好 ...

  9. Postman工具——下载与安装(转)

    https://blog.csdn.net/water_0815/article/details/53263643 今天给大家分享一款工具,好的工具能够让开发更高效,有时能成倍地提高.接下来会分几篇来 ...

  10. 实现AB值对换的两种方法

    package com.smbea.demo.exchange; /** * AB对换 * @author hapday * @2017年1月22日 @上午12:36:24 */ public cla ...