bzoj3732Network

题意:

给一个无向图,k个询问求节点a到节点b最长边的最小值。n,k≤15000。

题解:

”最长边的最小值“经常可以用最小生成树解决,因为生成树里的每一条边都是可取的最小边,求完生成树之后就是经典的倍增应用:求lca的时候顺便维护一下边权最大值即可。

代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define maxn 30010
using namespace std; inline int read(){
char ch=getchar(); int f=,x=;
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return f*x;
}
struct abc{int f,t,w;}abcd[maxn]; bool cmp(abc a,abc b){return a.w<b.w;}
struct e{int t,w,n;}es[maxn*]; int g[maxn],ess;
void pe(int f,int t,int w){
es[++ess]=(e){t,w,g[f]}; g[f]=ess; es[++ess]=(e){f,w,g[t]}; g[t]=ess;
}
int n,m,k,p[maxn],fa[][maxn],mx[][maxn],tot,dep[maxn];
int find(int x){return x==p[x]?x:p[x]=find(p[x]);}
void dfs(int x){
for(int i=g[x];i;i=es[i].n)if(es[i].t!=fa[][x])
fa[][es[i].t]=x,mx[][es[i].t]=es[i].w,dep[es[i].t]=dep[x]+,dfs(es[i].t);
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y); int t=dep[x]-dep[y],ans=;
for(int i=;(<<i)<=n;i++)if(t&(<<i))ans=max(ans,mx[i][x]),x=fa[i][x];
for(int i=;i>=;i--)if(fa[i][x]!=fa[i][y])
ans=max(ans,mx[i][x]),ans=max(ans,mx[i][y]),x=fa[i][x],y=fa[i][y];
if(x==y)return ans;else{ans=max(ans,mx[][x]); ans=max(ans,mx[][y]); return ans;}
}
int main(){
n=read(); m=read(); k=read(); inc(i,,n)p[i]=i;
inc(i,,m){int x=read(),y=read(),z=read(); abcd[i]=(abc){x,y,z};} sort(abcd+,abcd+m+,cmp);
inc(i,,m){
int x=find(abcd[i].f),y=find(abcd[i].t); if(x!=y)pe(x,y,abcd[i].w),p[x]=y,tot++; if(tot==n-)break;
}
dfs();
for(int i=;(<<i)<=n;i++)inc(j,,n)
fa[i][j]=fa[i-][fa[i-][j]],mx[i][j]=max(mx[i-][j],mx[i-][fa[i-][j]]);
inc(i,,k){int x=read(),y=read(); printf("%d\n",lca(x,y));}
return ;
}

20161115

bzoj3732Network的更多相关文章

  1. BZOJ3732Network——kruskal重构树+倍增+LCA/最小生成树+倍增

    题目描述 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 & ...

  2. 【LCA+MST】BZOJ3732-Network

    [题目大意] 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N.图中有M条边 (1<=M<=30,000) ,第j条边的长度:d_j (1<=d_j ...

随机推荐

  1. cheerio html方法中文被编码问题

    var $ = cheerio.load("<h1><p>你好</p><em>Hello,World!</em></h1&g ...

  2. Css教程玉女心经版本

    视频参见:php中文网css玉女心经视频教程 Css教程玉女心经版本 第1章     :css快速入门 1.1     什么是css 改变html框架的样式. 1.2     css的三种引入形式 第 ...

  3. jquery 李南江老师jquery和ajax视频教程

    链接:https://pan.baidu.com/s/11QF97RLg1aW9bf6o-CdHvQ 密码:qfer https://www.bilibili.com/video/av22807707 ...

  4. android 事件分发机制2-案例测试

    我们来看程序的代码: 要求: 1.通过手指移动来拖动图片 2.控制图片不能超出屏幕显示区域 技术点: 1.MotionEvent处理 2.对View进行动态定位(layout) package im. ...

  5. 01 . Shell详细入门介绍及简单应用

    Shell简介 Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 解释处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输 ...

  6. Spring Boot — 运行应用程序5种方式

    1. 从IDE中的Run 按钮运行 你可以从IDE中运行Spring Boot应用, 就像一个简单的Java应用, 但是, 你首先需要导入项目. 导入步骤跟你的IDE和构建系统有关. 大多数IDEs能 ...

  7. JQ三种提示框:提示信息框、确认框、输入文本框

    浏览器的三种提示框: alert()提示信息框 confirm()提示确认框 prompt()提示输入文本框 1.alert()提示信息框 效果: 实现代码: <script> alert ...

  8. 吐血推荐,想进BAT必看

    不必太纠结于当下,也不必太忧虑未来,人生没有无用的经历,当你经历过一些事情后,眼前的风景已经和从前不一样了.--村上春树 一.包含如下内容 ActiveMQ消息中间件面试专题 BAT80道面试题 BA ...

  9. AdminLTE 2.4

    https://jeesite.gitee.io/front/AdminLTE/2.4/index2.html

  10. PL/SQL 美化器&规则解释&优化代码

    前言 PLSQL有非常强大的自定义设置功能,比如美化文件规则, 使用者可以自行定义编辑规则,以便更好的优化SQL语句,增加可读性. 例如以下的部分代码,又长,分段不好,空格太多,结构散乱,还没有注释. ...