zoukankan      html  css  js  c++  java
  • HNOI2012永无乡

    [HNOI2012]永无乡
    Description
    永无乡包括 n 座岛。编号从 1 到 n,每座岛都有自己的独一无二的重要度。依照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥能够从一个岛 到达还有一个岛。假设从岛 a 出发经过若干座(含 0 座)桥能够到达岛 b。则称岛 a 和岛 b 是连 通的。如今有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥。Q x k 表示询问当前与岛 x连通的全部岛中第 k 重要的是哪座岛,即全部与岛 x 连通的岛中重要度排名第 k 小的岛是哪 座,请你输出那个岛的编号。
    Input
    输入文件第一行是用空格隔开的两个正整数 n 和 m。分别 表示岛的个数以及一開始存在的桥数。接下来的一行是用空格隔开的 n 个数。依次描写叙述从岛 1 到岛 n 的重要度排名。随后的 m 行每行是用空格隔开的两个正整数 ai 和 bi,表示一開始就存 在一座连接岛 ai 和岛 bi 的桥。后面剩下的部分描写叙述操作,该部分的第一行是一个正整数 q。 表示一共同拥有 q 个操作,接下来的 q 行依次描写叙述每一个操作,操作的格式如上所述,以大写字母 Q 或B 開始,后面跟两个不超过 n 的正整数,字母与数字以及两个数字之间用空格隔开。 对于 20%的数据 n≤1000,q≤1000
    对于 100%的数据 n≤100000,m≤n,q≤300000
    Output
    对于每一个 Q x k 操作都要依次输出一行,当中包括一个整数,表 示所询问岛屿的编号。假设该岛屿不存在,则输出-1。


    Sample Input
    5 1
    4 3 2 5 1
    1 2
    7
    Q 3 2
    Q 2 1
    B 2 3
    B 1 5
    Q 2 1
    Q 2 4
    Q 2 3
    Sample Output
    -1
    2
    5
    1
    2

    学到了线段树合并

    解题思路:
    1.首先依据题目,用并查集求出连通块
    2.对于每一个连通块建立权值线段树(就是那个能够来求第k大的东东。即1~max建立线段树。叶子节点有该值记为1,没有为0,维护和
    3.对于询问操作,仅仅需在该点所在连通块中查询第k大就可以
    4.对于加桥操作。就用到了线段树合并。代码超简单啊,尽管并不太懂为什么这样写(据说时空复杂度都在0(nlogn)

    int merge(int x,int y){
      if(!x)return y;
      if(!y)return x;
      ls[x]=merge(ls[x],ls[y]);
      rs[x]=merge(rs[x],rs[y]);
      sum[x]=sum[ls[x]]+sum[rs[x]];
      return x;
    }

    5.最后须要注意本题的数据范围较大。须要动态加点。用数组ls。rs来储存左右儿子,非常easy得到每加一个数最多改动logn个点。

    决定以后写题解不粘代码了,重要的是思路。

  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7234337.html
Copyright © 2011-2022 走看看