zoukankan      html  css  js  c++  java
  • BZOJ1455 罗马游戏

    支持合并,删除最小值操作的不就是可并堆吗。。。

    还要窝有板子,液!

    这题还要注意,对于一个点,找根的话,要用到并查集。

      1 /**************************************************************
      2     Problem: 1455
      3     User: rausen
      4     Language: C++
      5     Result: Accepted
      6     Time:1316 ms
      7     Memory:21312 kb
      8 ****************************************************************/
      9  
     10 #include <cstdio>
     11 #include <algorithm>
     12  
     13 using namespace std;
     14 const int N = 1000001;
     15 int n, m, fa[N];
     16 bool died[N];
     17  
     18 struct heap{
     19     int v, l, r, dep;
     20 }h[N];
     21  
     22 int Cnt;
     23  
     24 inline int read(){
     25     int x = 0;
     26     char ch = getchar();
     27     while (ch < '0' || ch > '9')
     28         ch = getchar();
     29     while (ch >= '0' && ch <= '9'){
     30         x = x * 10 + ch - '0';
     31         ch = getchar();
     32     }
     33     return x;
     34 }
     35  
     36 int pr[10], NUM = 0;
     37 inline void print(int x){
     38     while (x)
     39         pr[++NUM] = x % 10, x /= 10;
     40     while (NUM)
     41         putchar(pr[NUM--] + '0');
     42     putchar('
    ');
     43 }
     44  
     45 int find_fa(int x){
     46     return fa[x] == x ? x : fa[x] = find_fa(fa[x]);
     47 }
     48  
     49 inline int new_heap(int x){
     50     h[++Cnt].v = x;
     51     h[Cnt].l = h[Cnt].r = h[Cnt].dep = 0;
     52     return Cnt;
     53 }
     54  
     55 int Merge(int x, int y){
     56     if (!x || !y) return x + y;
     57     if (h[x].v > h[y].v)
     58         swap(x, y);
     59     h[x].r = Merge(h[x].r, y);
     60     if (h[h[x].l].dep < h[h[x].r].dep)
     61         swap(h[x].l, h[x].r);
     62     h[x].dep = h[h[x].r].dep + 1;
     63     return x;
     64 }
     65  
     66 int Top(int x){
     67     return h[x].v;
     68 }
     69  
     70 int Pop(int x){
     71     return Merge(h[x].l, h[x].r);
     72 }
     73  
     74 int main(){
     75     n = read();
     76     int i, t, x, y;
     77     for (i = 1; i <= n; ++i)
     78         new_heap(read()), fa[i] = i;
     79     h[0].dep = -1;
     80     char ch;
     81     m = read();
     82     for (i = 1; i <= m; ++i){
     83         ch = getchar();
     84         while (ch != 'M' && ch != 'K') ch = getchar();
     85         if (ch == 'M'){
     86             x = read(), y = read();
     87             if (died[x] || died[y]) continue;
     88             x = find_fa(x), y = find_fa(y);
     89             if (x != y)
     90                 t = Merge(x, y), fa[x] = fa[y] = t;
     91         }else{
     92             x = read();
     93             if (died[x]){
     94                 puts("0");
     95                 continue;
     96             }
     97             x = find_fa(x);
     98             died[x] = 1;
     99             print(h[x].v);
    100             fa[x] = Merge(h[x].l, h[x].r);
    101             fa[fa[x]] = fa[x];
    102         }
    103     }
    104     return 0;
    105 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    appium+python自动化24-滑动方法封装(swipe)
    selenium+python自动化82-只截某个元素的图
    selenium+python自动化81-html报告优化(饼图+失败重跑+兼容python2&3)
    selenium+python自动化79-文件下载(SendKeys)
    selenium+python自动化77-autoit文件上传
    Appium+python自动化22-Appium Desktop
    Appium+python自动化21-DesiredCapabilities详解
    Appium+python自动化20-查看iOS上app元素属性
    Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP
    Appium+python自动化18-brew、carthage和appium-doctor
  • 原文地址:https://www.cnblogs.com/rausen/p/4066526.html
Copyright © 2011-2022 走看看