zoukankan      html  css  js  c++  java
  • 【luogu P1456 Monkey King】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1456
    左偏树并查集不加路径压缩吧...

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int maxn = 100000 + 10;
    struct Left_Tree{
        int val, fa, son[2], dis;
    }h[maxn<<2];
    int n, m;
    int Merge(int r1, int r2)
    {
        if(r1 == 0 || r2 == 0) return r1 + r2;
        if(h[r1].val < h[r2].val) swap(r1, r2);
        h[r1].son[1] = Merge(h[r1].son[1], r2);
        h[h[r1].son[1]].fa = r1;
        if(h[h[r1].son[0]].dis < h[h[r1].son[1]].dis) swap(h[r1].son[1], h[r1].son[0]);
        if(h[r1].son[1] == 0) h[r1].dis = 0;
        else h[r1].dis = h[h[r1].son[1]].dis + 1;
        return r1;
    }
    int destory(int r1)
    { 
        int le = h[r1].son[0], ri = h[r1].son[1];
        h[le].fa = 0;h[ri].fa = 0;
        int res = Merge(le, ri);
        h[r1].son[0] = h[r1].son[1] = 0;
        return res;
    }
    int find(int x)
    {
        while(h[x].fa)
        x = h[x].fa;
        return x;
    }
    int main()
    {
        while(scanf("%d",&n) != EOF)
        {
            for(int i = 1; i <= n; i++)
            {
                h[i].val = h[i].fa = 0;
                h[i].son[0] = h[i].son[1] = h[i].dis = 0;
            }
            for(int i = 1; i <= n; i++)
            scanf("%d",&h[i].val);
            
            scanf("%d",&m);
            for(int i = 1; i <= m; i++)
            {
                int opt, x, y;
                scanf("%d%d",&x,&y);
                int t1 = find(x), t2 = find(y);
                if(t1 == t2) 
                {
                    printf("-1
    ");
                    continue;	
                }
                    h[t1].val /= 2; h[t2].val /= 2;
                    int left = destory(t1);
                    int right = destory(t2);
                    left = Merge(left, t1);
                    right = Merge(right, t2);
                    left = Merge(left, right);
                    printf("%d
    ",h[left].val);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    vs2008打开aspx文件时设计界面死机情况的解决
    数据库设计知识点
    JS从样式表取值的函数currentStyle(IE),defaultView(FF)
    Iframe选区
    实用正则表达式(实用篇)
    46.class属性 Walker
    410.锚链接和空链接 Walker
    45.ID属性 Walker
    49.文件下载 Walker
    47.title和style属性 Walker
  • 原文地址:https://www.cnblogs.com/MisakaAzusa/p/9425999.html
Copyright © 2011-2022 走看看