zoukankan      html  css  js  c++  java
  • 【模板】斜堆

    如题这是一个模板。。。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cctype>
     6 
     7 inline void read(int & x)
     8 {
     9     x = 0;
    10     int k = 1;
    11     char c = getchar();
    12     while (!isdigit(c))
    13         if (c == '-') c = getchar(), k = -1;
    14         else c = getchar();
    15     while (isdigit(c))
    16         x = (x << 1) + (x << 3) + (c ^ 48),
    17         c = getchar();
    18     x *= k;
    19 }
    20 
    21 const int MAXN = 100010;
    22 int n, m, opt, x, y, tot = 0;
    23 int faz[MAXN], son[MAXN][2], val[MAXN];
    24 
    25 inline int Find(int u)
    26 {
    27     while (faz[u]) u = faz[u];
    28     return u;
    29 }
    30 
    31 int Merge(int a, int b)
    32 {
    33     if (!a || !b) { return a + b; }
    34     if (val[a] > val[b] || (val[a] == val[b] && a > b))
    35         std::swap(a, b);
    36     son[a][1] = Merge(son[a][1], b);
    37     faz[son[a][1]] = a;
    38     std::swap(son[a][1], son[a][0]); 
    39     return a;
    40 }
    41 
    42 int qa, qb, cc;
    43 
    44 inline void Merge_opt(int aa, int bb)
    45 {
    46     if (val[aa] == -1 || val[bb] == -1) return;
    47     qa = Find(aa), qb = Find(bb);
    48     if (qa == qb) return;
    49     Merge(qa, qb);
    50 }
    51 
    52 signed main()
    53 {
    54     read(n), read(m);
    55     for (int i = 1; i <= n; ++i)
    56         read(val[i]);
    57     for (int i = 1; i <= m; ++i)
    58     {
    59         read(opt), read(x);
    60         if (opt == 1) read(y), Merge_opt(x, y);
    61         else
    62         {
    63             if (val[x] == -1) {puts("-1"); continue;}
    64             y = Find(x);
    65             printf("%d
    ", val[y]);
    66             faz[son[y][0]] = faz[son[y][1]] = 0;
    67             val[y] = -1;
    68             Merge_opt(son[y][0], son[y][1]);
    69         }
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    Best Cow Line(POJ No.3617)
    迷宫的最短路径
    Lak3 Counting(POJ No.2386)
    【日志】-2013.11.02
    用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(上)
    用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(下)
    【日志】-2013.11.01
    (转载)HTML与XHTML有什么区别
    (转载)linux环境变量
    转载-KMP算法前缀数组优雅实现
  • 原文地址:https://www.cnblogs.com/yanyiming10243247/p/10057792.html
Copyright © 2011-2022 走看看