题面

题意:给你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 图论 最小生成树 倍增的更多相关文章

  1. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  2. bzoj 3732 Network(最短路+倍增 | LCT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3732 [题意] 给定一个无向图,处理若干询问:uv路径上最长的边最小是多少? [思路一 ...

  3. BZOJ 3732 Network —— 最小生成树 + 倍增LCA

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 <= N <= 15, ...

  4. BZOJ 3732 Network Kruskal+倍增LCA

    题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...

  5. BZOJ 3732 Network

    2016.1.28 纪念我BZOJ第一题 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= ...

  6. bzoj 3732: Network 树上两点边权最值

    http://www.lydsy.com/JudgeOnline/problem.php?id=3732 首先想到,要使得最长边最短,应该尽量走最短的边,在MST上. 然后像LCA那样倍增娶个最大值 ...

  7. bzoj 3732: Network【克鲁斯卡尔+树链剖分】

    先做最小生成树,这样就保证了最大值最小 然后随便用个什么东西维护一下最大值,我用的树剖log^2,倍增会更快 #include<iostream> #include<cstdio&g ...

  8. BZOJ 3732 Network 【模板】kruskal重构树

    [题解] 首先,我们可以发现,A到B的所有路径中,最长边的最小值一定在最小生成树上.我们用Kruskal最小生成树时,假设有两个点集U,V,若加入一条边w(u,v)使U,V联通,那么w就是U中每个点到 ...

  9. [bzoj 3732] Network (Kruskal重构树)

    kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...

随机推荐

  1. 【Oracle】进入sqlplus 删除键backspace时出现^H

    当oracle进入sqlplus后,输入命令时候出现错误,我们按平时的习惯使用backspace键删除错误信息,此时会出现^H 解决办法:进入sqlplus之前,使用stty erase '^H'命令 ...

  2. vue axios 请求带token设置

    API axios.js import axios from "axios"; let AUTH_TOKEN=(function(){ return localStorage.ge ...

  3. Table is specified twice, both as a target for 'UPDATE' and as a separate source

    UPDATE Bins b SET b.ShopSn =’111201611111168706’ WHERE b.Id IN (SELECT b.Id FROM Bins b JOIN BinInve ...

  4. tee

    功能说明:把数据重定向到给定文件和屏幕上.   参数选项: -a  向文件追加内容,而不是覆盖.   tee命令允许标准输出同时把内容写入(覆盖)到文件中的实践.   tee命令允许标准输出同时把内容 ...

  5. 3D模型在UI上显示的方法(Unity)

    方法:使用RawImage通过Render Texter将摄像机下的物体渲染纹理记录并显示在RawImage上面 具体实现:新建一个模型(Cube),新建一个摄像机,将Clear Flags设置为So ...

  6. 【剑指Offer】22、从上往下打印二叉树

      题目描述:   从上往下打印出二叉树的每个节点,同层节点从左至右打印.   解题思路:   本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列.同样我们可以通过 ...

  7. 蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)

    长链剖分学习笔记 说到树的链剖,大多数人都会首先想到重链剖分.的确,目前重链剖分在OI中有更加多样化的应用,但它大多时候是替代不了长链剖分的. 重链剖分是把size最大的儿子当成重儿子,顾名思义长链剖 ...

  8. 51nod1134 最长递增子序列【动态规划】

    给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个数N ...

  9. Nginx面试中最常见的18道题 抱佛脚必备

    Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯.淘宝.百度.京东.新浪.网易等等.Nginx是网页服务器运维人员 ...

  10. oculus network error ovr53225466

    最近调试oculus,搬运代码到win10平台,发现最近FB对oculus的服务程序进行了更新,必须要登陆账号才能进行调试. 于是安装oculusclient,但是登陆的过程中出现了问题,如果不用代理 ...