Description

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

现在有 K个询问 (1 < = K < = 15,000)。
每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?

Input

第一行: N, M, K。
第2..M+1行: 三个正整数:X, Y, and D (1 <= X <=N; 1 <= Y <= N). 表示X与Y之间有一条长度为D的边。
第M+2..M+K+1行: 每行两个整数A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?

Output

对每个询问,输出最长的边最小值是多少。

Sample Input

6 6 8
1 2 5
2 3 4
3 4 3
1 4 8
2 5 7
4 6 2
1 2
1 3
1 4
2 3
2 4
5 1
6 2
6 1

Sample Output

5
5
5
4
4
7
4
5

HINT

1 <= N <= 15,000

1 <= M <= 30,000

1 <= d_j <= 1,000,000,000

1 <= K <= 15,000

正解:倍增+最小生成树

解题报告:

  今天考了,那就再发一遍吧。

  又重新写了一遍,刚开始觉得是码农,结果20分钟不到就打完了...

  显然最小生成树可以满足性质:任意两点之间最大边权最小,然后得到一棵最小生成树树之后就可以在上面跑倍增了。

 //It is made by jump~
 #include <iostream>
 #include <cstdlib>
 #include <cstring>
 #include <cstdio>
 #include <cmath>
 #include <algorithm>
 #include <ctime>
 #include <vector>
 #include <queue>
 #include <map>
 #include <set>
 using namespace std;
 typedef long long LL;
 ;
 ;
 int n,m,ans,ecnt,father[MAXN];
 int first[MAXN],to[MAXM],next[MAXM],w[MAXM];
 int deep[MAXN];
 ],g[MAXN][];
 struct edge{
     int x,y,z;
 }e[MAXM];

 inline int getint()
 {
        ,q=; char c=getchar();
        ,c=getchar();
        +c-', c=getchar(); return q ? -w : w;
 }
 inline bool cmp(edge q,edge qq){ return q.z<qq.z; }
 inline int find(int x){ if(father[x]!=x) father[x]=find(father[x]); return father[x]; }
 inline void dfs(int x,int fa){
     for(int i=first[x];i;i=next[i]) {
     int v=to[i]; if(v==fa) continue;
     f[v][]=x; g[v][]=w[i]; deep[v]=deep[x]+; dfs(v,x);
     }
 }

 inline void lca(int x,int y){
     if(deep[x]<deep[y]) swap(x,y);
     ; <<t)<=deep[x]) t++; t--;
     ;i--) <<i)>=deep[y]) ans=max(ans,g[x][i]),x=f[x][i];
     if(x==y) return ;
     ;i--) {
     if(f[x][i]!=f[y][i]) {
         ans=max(g[x][i],ans); ans=max(ans,g[y][i]);
         x=f[x][i]; y=f[y][i];
     }
     }
     ans=max(ans,g[x][]); ans=max(ans,g[y][]);
     return ;
 }

 inline void work(){
     n=getint(); m=getint(); int p=getint();
     ;i<=m;i++) e[i].x=getint(),e[i].y=getint(),e[i].z=getint();
     sort(e+,e+m+,cmp); ;i<=n;i++) father[i]=i;
     int r1,r2; int x,y;
     ;i<=m;i++) {
     r1=find(e[i].x); r2=find(e[i].y);
     if(r1!=r2) {
         father[r1]=r2; x=e[i].x; y=e[i].y;
         next[++ecnt]=first[x]; first[x]=ecnt; to[ecnt]=y; w[ecnt]=e[i].z;
         next[++ecnt]=first[y]; first[y]=ecnt; to[ecnt]=x; w[ecnt]=e[i].z;
     }
     }
     ;i<=n;i++) ; dfs(i,); }
     ;j<=;j++) ;i<=n;i++) f[i][j]=f[f[i][j-]][j-],g[i][j]=max(g[i][j-],g[f[i][j-]][j-]);
     while(p--) {
     x=getint(); y=getint();
     ans=; lca(x,y);
     printf("%d\n",ans);
     }
 }

 int main()
 {
   work();
   ;
 }

BZOJ3732 Network的更多相关文章

  1. 【BZOJ3732】 Network Kruskal+倍增lca

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

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. 创建 OVS flat network - 每天5分钟玩转 OpenStack(134)

    上一节完成了 flat 的配置工作,今天创建 OVS flat network.Admin -> Networks,点击 "Create Network" 按钮. 显示创建页 ...

  4. 在 ML2 中配置 OVS flat network - 每天5分钟玩转 OpenStack(133)

    前面讨论了 OVS local network,今天开始学习 flat network. flat network 是不带 tag 的网络,宿主机的物理网卡通过网桥与 flat network 连接, ...

  5. OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)

    前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...

  6. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)

    上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...

  7. 创建 OVS Local Network - 每天5分钟玩转 OpenStack(129)

    上一节我们完成了 OVS 的准备工作,本节从最基础的 local network 开始学习.local network 不会与宿主机的任何物理网卡连接,流量只被限制在宿主机内,同时也不关联任何的 VL ...

  8. Configure a bridged network interface for KVM using RHEL 5.4 or later?

    environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual ...

  9. BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submi ...

随机推荐

  1. Orcale 三层嵌套分页代码

    select * from( select emp.*,rownum a from ( select * from emp ) emp where rownum<7) where a>3

  2. 潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师

    潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师 讲的不错,可以学习 下面是教程的目录截图: 下载地址:http://www.fu83.cn/thread-283-1-1.htm ...

  3. NOSDK--SDK一键打包及统一接入的实现(前言)

    前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...

  4. wpf 窗体内容旋转效果 网摘

    <Window x:Class="simplewpf.chuangtixuanzzhuan"        xmlns="http://schemas.micros ...

  5. vc++编译libtiff4.0.4

    目录 第1章简介    1 第2章命令行编译    2 2.1 编译    2 2.1.1 使用VC++2010编译    2 2.1.2 使用VC++6编译    4 2.2 生成的文件    5 ...

  6. 【英语】Bingo口语笔记(55) - work系列

  7. C++ map排序(按照value值排序)_glp_hit_新浪博客

    C++ map排序(按照value值排序)_glp_hit_新浪博客     C++ map排序(按照value值排序)    (2012-07-12 14:19:51)    转载▼    标签:  ...

  8. linux编程基础汇总贴

    linux编程基础汇总贴http://newzol.cn/forum.php?mod=viewthread&tid=67&fromuid=3(出处: newzol) 1.管道 http ...

  9. shell拼写检查,利用Linux字典

    rename #find path -type  f -name "*.mp3" -exec mv { } target_dir \; #mp3 file mv dir_file ...

  10. Regularity criteria for NSE 4: $\p_3u$

    In [Zhang, Zujin. An improved regularity criterion for the Navier–Stokes equations in terms of one d ...