BZOJ-3732 Network 图论 最小生成树 倍增
题意:给你N个点,M条边的无向图 (N<=15000,M<=30000)第j条边的长度为 dj (1<=dj<=1e9),然后K个询问 (1<=K<=20000)。
每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?
题解:求所有路径上,那些最大的边中最小的值,也就是“最小”的路径上的最大值,那也是就是最小生成树上,路径的最大值,多次询问,利用树链剖分或者倍增解决
#include<bits/stdc++.h>
using namespace std;
#define lld long long
#define N 30005
struct rec
{
int go,next,v;
}eg[N],a[N];
int k,m,n,x,y,p,head[N],lca[N][],q[N][],dep[N];
int fa[N];
void build(int x,int y,int c)
{
p++;
eg[p].next=head[x];
eg[p].go=y;
eg[p].v=c;
head[x]=p;
}
bool cmp(rec x,rec y)
{
return x.v<y.v;
}
int get(int x)
{
if (fa[x]==x) return x;
fa[x]=get(fa[x]);
return fa[x];
}
int query(int x,int y)
{
int ret=;
if (dep[x]<dep[y]) swap(x,y);
for (int i=;i>=;i--)
if (dep[x]-(<<i)>=dep[y])
{
ret=max(ret,q[x][i]);
x=lca[x][i];
}
if (x==y) return ret;
for (int i=;i>=;i--)
if (lca[x][i]!=lca[y][i])
{
ret=max(ret,max(q[x][i],q[y][i]));
x=lca[x][i];
y=lca[y][i];
}
ret=max(ret,max(q[x][],q[y][]));
return ret;
}
void dfs(int x)
{
for (int i=head[x];i;i=eg[i].next)
{
int v=eg[i].go;
if (v==lca[x][]) continue;
dep[v]=dep[x]+;
lca[v][]=x;
q[v][]=eg[i].v;
dfs(v);
}
}
int main()
{
freopen("1.txt","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for (int i=;i<=n;i++) fa[i]=i;
for (int i=;i<=m;i++) scanf("%d%d%d",&a[i].go,&a[i].next,&a[i].v);
sort(a+,a+m+,cmp);
int cnt=;
for (int i=;i<=m;i++)
{
x=get(a[i].go),y=get(a[i].next);
if (x!=y)
{
fa[x]=y;
cnt++;
build(a[i].go,a[i].next,a[i].v);
build(a[i].next,a[i].go,a[i].v);
}
if (cnt==n-) break;
}
dfs();
for (int j=;j<=;j++)
for (int i=;i<=n;i++)
if (lca[i][j-])
{
lca[i][j]=lca[lca[i][j-]][j-];
q[i][j]=max(q[i][j-],q[lca[i][j-]][j-]);
}
while (k--)
{
scanf("%d%d",&x,&y);
printf("%d\n",query(x,y));
}
}
BZOJ-3732 Network 图论 最小生成树 倍增的更多相关文章
- BZOJ 3732: Network 最小生成树 倍增
3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...
- bzoj 3732 Network(最短路+倍增 | LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3732 [题意] 给定一个无向图,处理若干询问:uv路径上最长的边最小是多少? [思路一 ...
- BZOJ 3732 Network —— 最小生成树 + 倍增LCA
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 <= N <= 15, ...
- BZOJ 3732 Network Kruskal+倍增LCA
题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...
- BZOJ 3732 Network
2016.1.28 纪念我BZOJ第一题 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= ...
- bzoj 3732: Network 树上两点边权最值
http://www.lydsy.com/JudgeOnline/problem.php?id=3732 首先想到,要使得最长边最短,应该尽量走最短的边,在MST上. 然后像LCA那样倍增娶个最大值 ...
- bzoj 3732: Network【克鲁斯卡尔+树链剖分】
先做最小生成树,这样就保证了最大值最小 然后随便用个什么东西维护一下最大值,我用的树剖log^2,倍增会更快 #include<iostream> #include<cstdio&g ...
- BZOJ 3732 Network 【模板】kruskal重构树
[题解] 首先,我们可以发现,A到B的所有路径中,最长边的最小值一定在最小生成树上.我们用Kruskal最小生成树时,假设有两个点集U,V,若加入一条边w(u,v)使U,V联通,那么w就是U中每个点到 ...
- [bzoj 3732] Network (Kruskal重构树)
kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...
随机推荐
- Android,加载离线Android API文档缓慢问题!
解决方法:在host文件末添加如下信息! 0.0.0.0 www.googleapis.com 0.0.0.0 www.google.com 0.0.0.0 www.google-analytics. ...
- 存档:Telerik Test Studio的摸索笔记
http://www.51testing.com/?uid-170604-action-spacelist-starttime-1328025600-endtime-1330531200 http:/ ...
- 06--谈谈:C++类的“包含”机制
谈谈:C++类的“包含”机制 本人在学习Qt的时候发现了一个非常有趣的现象.有很多函数的调用方法都写成了如下的形式: object.func().func2(); 这令小弟着实不懂.在上面这段代码 ...
- C#写上位机中写曲线图的知识点(VS2019-WPF)
最近在写一个上位机,为了与下位机软件串口进行通信以及一些数据的形象显示,做到曲线图这一块的时候出现了一些问题,我用的是VS2019(个人不能吐槽VS2019新版本,因为平时也很少用VS,下载的时候就直 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- 三种办法来安装Python3.x
Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x你可以按照此文的三个方法进行安装. 注:本文示例安装版本为Python3.5, 一.Python源代码编译安装 安 ...
- Context、Select(day01)
Oracle sql: 4天 plsql: 2天 proc: 2天 数据库介绍 1.1 数据库简介 1.1.1 数据管理技术的发展 人工管理阶段:20世纪50年代中期之前 文件管理阶段:20世纪的50 ...
- java实现根据高德地图API接口进行地址位置解析,将地址转化为经纬度
原创文章,转载请注明,欢迎评论和更改. 1,所需额外ar包,import net.sf.json.JSONObject; 2,完整源代码代码 package com.travel.util; impo ...
- canvas实现圆框图片
作者:issac_宝华链接:http://www.jianshu.com/p/9a6ee2648d6f來源:简书 在html中做圆框图片很容易,只需要简单的 border-radius: 50%; 当 ...
- python第十一周:RabbitMQ、Redis
Rabbit Mq消息队列 RabbitMQ能为你做些什么? 消息系统允许软件.应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和 ...