• <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>

            A Za, A Za, Fighting...

            堅信:勤能補拙

            PKU 1988 Cube Stacking

            問題:
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1988

            思路:
            并查集的妙用
            up[i]記錄節(jié)點i到根節(jié)點的距離(有多少元素)
            sum[i]記錄以i作為根節(jié)點的樹所包含的節(jié)點的個數(shù)
            重點是在進行union與find操作時如何更新這兩個數(shù)組,find操作所暗含路徑壓縮時up數(shù)組的更新較難理解

            參考:
            http://www.shnenglu.com/longzxr/archive/2009/07/13/89974.html

            代碼:
             1 #include<stdio.h>
             2 #include<stdlib.h>
             3 #include<string.h>
             4 #define MAX_NUM 30005
             5 int father[MAX_NUM], up[MAX_NUM], sum[MAX_NUM];
             6 
             7 void
             8 init()
             9 {
            10     int i;
            11     for(i=1; i<MAX_NUM; i++) {
            12         father[i] = i;
            13         sum[i] = 1;
            14         up[i] = 0;
            15     }
            16 }
            17 
            18 int
            19 find(int item)
            20 {
            21     int tmp = father[item];
            22     if(father[item] != item) {
            23         father[item] = find(father[item]);
            24         up[item] += up[tmp];
            25     }
            26     return father[item];
            27 }
            28 
            29 void
            30 uunion(int top, int down)
            31 {
            32     int a = find(top);
            33     int b = find(down);
            34     if(a == b)
            35         return;
            36     father[b] = a;
            37     up[b] = sum[a];
            38     sum[a] += sum[b];
            39 }
            40 
            41 int
            42 main(int argc, char **argv)
            43 {
            44     int p, top, down, r, cube;
            45     char ch[2];
            46     scanf("%d"&p);
            47     init();
            48     while(p--) {
            49         scanf("%s", ch);
            50         if(ch[0== 'M') {
            51             scanf("%d %d"&top, &down);
            52             uunion(top, down);
            53         } else {
            54             scanf("%d"&cube);
            55             r = find(cube);
            56             printf("%d\n", sum[r]-up[cube]-1);
            57         }
            58     }
            59 }

            posted on 2010-08-09 14:59 simplyzhao 閱讀(215) 評論(0)  編輯 收藏 引用 所屬分類: E_數(shù)據(jù)結(jié)構(gòu)

            導(dǎo)航

            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久天天躁狠狠躁夜夜不卡 | 一本久久a久久精品综合香蕉| 91精品国产91久久| 久久亚洲国产成人影院网站| 久久婷婷五月综合国产尤物app| 久久久久久久久无码精品亚洲日韩| 久久久综合九色合综国产| 久久高潮一级毛片免费| 无码人妻久久一区二区三区免费| 国产精品久久久久久久| 少妇熟女久久综合网色欲| 久久777国产线看观看精品| 伊人久久大香线蕉综合热线| 久久综合丁香激情久久| 亚洲国产成人久久综合一区77| 国内精品久久久久久99蜜桃| 亚洲а∨天堂久久精品| 999久久久国产精品| 久久无码人妻一区二区三区午夜| 色综合久久中文色婷婷| 婷婷综合久久中文字幕蜜桃三电影| 国产成人久久精品麻豆一区| 久久精品国产亚洲精品2020| 无码国内精品久久综合88| 97久久精品人人澡人人爽| 久久国产乱子精品免费女| 亚洲国产精品无码成人片久久 | 波多野结衣久久一区二区| 国产99久久久久久免费看| 国产一区二区精品久久| 久久精品aⅴ无码中文字字幕不卡| 国内精品久久久久影院薰衣草| 亚洲欧洲精品成人久久曰影片| 久久久久久国产a免费观看不卡| 国产精品伦理久久久久久| 国产精品久久久福利| 久久免费精品一区二区| 国产精品久久亚洲不卡动漫| 久久99精品国产99久久| 久久久久一区二区三区| 国产午夜精品久久久久九九电影|