• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-72  評(píng)論-126  文章-0  trackbacks-0
            http://acm.hdu.edu.cn/showproblem.php?pid=1512


            #include<stdio.h>
            #define MAX 100001

            struct Left_Heap{
                
            int left,right;
                
            int father;
                
            int pow;
                
            int deep;
            }hh[MAX];

            int find(int a)
            {
                
            while(a!=hh[a].father)
                    a 
            = hh[a].father;
                
            return a;
            }
            int unite(int x,int y)//返回的是樹(shù)的根節(jié)點(diǎn)
            {
                
            if(!x)            //x是空樹(shù)
                    return y;    //返回的就是y樹(shù)的根節(jié)點(diǎn)
                if(!y)
                    
            return x;
                
            if(hh[x].pow < hh[y].pow)            //以x樹(shù)主樹(shù),y插入
                    x^=y^=x^=y;
                hh[x].right 
            = unite(hh[x].right,y);    //合并y和x的右子樹(shù)
                hh[ hh[x].right ].father = x;        //x的右子樹(shù)的父親是x(這不是廢話嘛)
                if(hh[ hh[x].left ].deep < hh[ hh[x].right ].deep)//保證左子深度要比右子樹(shù)大
                    hh[x].left ^= hh[x].right ^= hh[x].left ^= hh[x].right;
                hh[x].deep 
            = hh[ hh[x].right ].deep + 1;
                
            return x;
            }
            int maxpow(int k)//返回的是樹(shù)的根節(jié)點(diǎn)
            {
                
            int l,r;
                hh[k].pow 
            >>= 1;
                l 
            = hh[k].left;
                r 
            = hh[k].right;//節(jié)點(diǎn)單獨(dú)拿出來(lái)
                hh[l].father = l;
                hh[r].father 
            = r;//左右兒子分別成樹(shù)
                hh[k].left = hh[k].right = hh[k].deep = 0;//變成沒(méi)有左右兒子
                l = unite(l,r);//合并原來(lái)的左右兒子
                k = unite(l,k);//把這個(gè)節(jié)點(diǎn)加進(jìn)合并出來(lái)的樹(shù)
                return k;
            }
            int main()
            {
                
            int n,i,m,a,b,x,y,k;
                
            while(scanf("%d",&n)==1)
                {
                    
            for(i=1;i<=n;i++)
                    {
                        scanf(
            "%d",&hh[i].pow);
                        hh[i].father 
            = i;
                        hh[i].left 
            = hh[i].right = hh[i].deep = 0;
                    }
                    scanf(
            "%d",&m);
                    
            while(m--)
                    {
                        scanf(
            "%d%d",&a,&b);
                        x 
            = find(a);//找根節(jié)點(diǎn)
                        y = find(b);//找根節(jié)點(diǎn)
                        if(x==y)
                            puts(
            "-1");
                        
            else
                        {
                            x 
            = maxpow(x);//處理x的根節(jié)點(diǎn),并返回處理后的根節(jié)點(diǎn)
                            y = maxpow(y);
                            k 
            = unite(x,y);//合并兩顆樹(shù)
                            printf("%d\n",hh[k].pow);
                        }
                    }
                }
                
            return 0;
            }



            合并的時(shí)候的步驟
            0.其中一顆樹(shù)為空的話返回另外一個(gè)
            1.將x確定為主樹(shù)(交換xy)
            2.合并x的右兒子和y
            3.合并出來(lái)的根節(jié)點(diǎn)的father指向x
            4.保證左兒子深度大于右兒子

            還有一道:
            http://acm.hdu.edu.cn/showproblem.php?pid=1434
            posted on 2009-03-18 18:14 shǎ崽 閱讀(1058) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久免费看黄a级毛片| 99精品国产在热久久无毒不卡| 国产亚洲精午夜久久久久久| 久久精品国产精品亚洲下载 | 亚洲国产成人久久一区久久| 色老头网站久久网| www亚洲欲色成人久久精品| 亚洲伊人久久成综合人影院 | 久久国产精品免费一区二区三区| 欧洲性大片xxxxx久久久| av无码久久久久不卡免费网站 | 久久精品国产亚洲av麻豆小说| 久久中文字幕一区二区| 亚洲中文字幕无码久久精品1 | 久久天天躁狠狠躁夜夜av浪潮 | 久久婷婷五月综合色奶水99啪| 久久久国产精华液| 久久精品国产精品青草| 亚洲精品乱码久久久久久按摩 | 狠狠88综合久久久久综合网| 伊人久久大香线蕉综合影院首页| 欧美国产成人久久精品| 日本免费久久久久久久网站| 狠狠88综合久久久久综合网| 亚洲va中文字幕无码久久| 一本色道久久88综合日韩精品 | 无码人妻久久一区二区三区 | 亚洲中文字幕久久精品无码APP | 日本人妻丰满熟妇久久久久久| 久久婷婷午色综合夜啪| 亚洲日本va午夜中文字幕久久| 久久久久久毛片免费看| 久久精品国产黑森林| 久久人人爽人人爽人人片AV东京热| 91麻精品国产91久久久久| 日本精品久久久久中文字幕| 国产成人香蕉久久久久| 国产精品午夜久久| 久久亚洲中文字幕精品一区四| 久久强奷乱码老熟女网站| 欧美大战日韩91综合一区婷婷久久青草|