先搞个最小生成树,然后lca(和之前的一个cf题差不多2333, 纯属颓废了。。)

顺便思考了一下正确性。

因为所求的是所有路径中最大边的最小值。而kruskal每次往里添加的就是最小边。所以在生成树之后两点之间的路径,都是严格按最小的插入的,所以里面的最大边会最小。(貌似说了些废话,,,)

  1. #include<bits/stdc++.h>
  2. #define inf 0x7fffffff
  3. #define LL long long
  4. #define N 100005
  5. using namespace std;
  6. inline int ra()
  7. {
  8. int x=,f=; char ch=getchar();
  9. while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
  10. while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
  11. return x*f;
  12. }
  13. struct node{
  14. int to,next,v;
  15. }e[N<<];
  16. struct data{
  17. int x,y,v;
  18. }a[N];
  19. int n,m,k;
  20. int head[N],cnt,deep[N],father[N],f[N][],mx[N][];
  21. void insert(int x, int y, int v)
  22. {
  23. e[++cnt].to=y;
  24. e[cnt].next=head[x];
  25. e[cnt].v=v;
  26. head[x]=cnt;
  27. }
  28. int find(int x){return father[x]==x?x:father[x]=find(father[x]);}
  29. bool cmp(data a, data b){return a.v<b.v;}
  30. void dfs(int x, int fa)
  31. {
  32. for (int i=; i<=; i++)
  33. {
  34. f[x][i]=f[f[x][i-]][i-];
  35. mx[x][i]=max(mx[x][i-],mx[f[x][i-]][i-]);
  36. }
  37. for (int i=head[x];i;i=e[i].next)
  38. {
  39. if (e[i].to==fa) continue;
  40. f[e[i].to][]=x;
  41. mx[e[i].to][]=e[i].v;
  42. deep[e[i].to]=deep[x]+;
  43. dfs(e[i].to,x);
  44. }
  45. }
  46. int getans(int x, int y)
  47. {
  48. int ans=;
  49. if (deep[x]<deep[y]) swap(x,y);
  50. int t=deep[x]-deep[y];
  51. for (int i=; i<=; i++)
  52. if (t&(<<i)) ans=max(ans,mx[x][i]),x=f[x][i];
  53. for (int i=; i>=; i--)
  54. if (f[x][i]!=f[y][i])
  55. {
  56. ans=max(ans,max(mx[x][i],mx[y][i]));
  57. x=f[x][i]; y=f[y][i];
  58. }
  59. if (x!=y) return max(ans,max(mx[x][],mx[y][]));
  60. return ans;
  61. }
  62. int main()
  63. {
  64. n=ra(); m=ra(); k=ra();
  65. for (int i=; i<=m; i++)
  66. a[i].x=ra(),a[i].y=ra(),a[i].v=ra();
  67. sort(a+,a+m+,cmp);
  68. for (int i=; i<=n; i++) father[i]=i;
  69. int tot=;
  70. for (int i=; i<=m; i++)
  71. {
  72. int p=find(a[i].x),q=find(a[i].y);
  73. if (q!=p)
  74. father[q]=p,tot++,insert(a[i].x,a[i].y,a[i].v),insert(a[i].y,a[i].x,a[i].v);
  75. if (tot==n-) break;
  76. }
  77. dfs(,);
  78. for (int i=; i<=k; i++)
  79. {
  80. int x=ra(),y=ra();
  81. printf("%d\n",getans(x,y));
  82. }
  83. return ;
  84. }

bzoj 3732Network的更多相关文章

  1. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  2. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  3. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  4. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  5. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  6. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  7. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  8. 【splay】文艺平衡树 BZOJ 3223

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

  9. bzoj 刷水

    bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. #include <iostream> #include <cst ...

随机推荐

  1. @Controller 和 @RestController 的区别

    @Controller和@RestController的区别? 官方文档:@RestController is a stereotype annotation that combines @Respo ...

  2. php 实现店铺装修6

    /** * @title 获取预览或发布的蜂店模板样式 * @param store_id 是 string 店铺id * @param type 是 int 装修模板的状态:1-预览蜂店装修模板样式 ...

  3. 网络流的最大流入门(从普通算法到dinic优化)

    网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关.网络流的理论和应用在不断发展.而我们今天要讲的就是网络流里的一种常见问题--最大流问题. 最大流问题(maximu ...

  4. JavaWeb开发:从购买服务器到简单demo运行

    写这篇文章的目的: 一个是为了记录实施过程,方便自己日后查阅: 另一个是给项目组成员提供一个参考,方便他们以后搭建自己的项目环境: 当然若能帮助到更多的朋友,那就再好不过了:D 需要注意: 我本身也是 ...

  5. css解决字段不换行

    1.自动换行 <div style="widht:100%;height:100%;word-wrap: break-word">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ...

  6. List循环添加数据覆盖问题

    问题:java开发时,当我们使用List.add();循环添加数据,有时会出现前面添加的数据会被后面覆盖的现象.这是怎么回事尼? 会覆盖数据的代码 package com.boot.test; imp ...

  7. jumpserver手动配置文档

    1.环境  centos7.6   硬盘 200G  cpu  8核心  内存 32G (本地测试的时候,有报错,原因为虚拟机配置不够,此时为在pve虚拟化上面做的linux系统) 2.https:/ ...

  8. 题解 nflsoj489 【六校联合训练 CSP #15】小D与随机

    题目链接 考虑枚举好点的集合.此时要考虑的问题是如何填入\(1\sim n\)这些数使得恰好我们枚举到的这些点是好点,即:求出有多少种合法的填数方案. \(1\)号点一定是好点.那么除\(1\)号点外 ...

  9. 基于 QEMU进行 arm 仿真开发 (以 vexpress-a9 为例)

    背景 基于 QEMU 的仿真可以节省 硬件成本. 参考:<qemu-system-arm仿真vexpress-a9踩坑记>.<在Ubuntu下使用QEMU搭建arm开发环境(一)搭建 ...

  10. python里的def 方法中->代表什么意思?

    功能注释 函数注释是关于用户定义函数使用的类型的完全可选元数据信息(请参阅PEP 3107和 PEP 484了解更多信息). 注释__annotations__ 作为字典存储在函数的属性中,对函数的任 ...