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

            poj 1703 Find them, Catch them 并查集

               并查集應(yīng)用的變形。
               給出的是2個(gè)節(jié)點(diǎn)是敵對(duì)關(guān)系的信息,最后詢問(wèn)任意2個(gè)節(jié)點(diǎn)的關(guān)系。根據(jù)這些信息,
            節(jié)點(diǎn)之間可能是敵對(duì)的,也可能不是的(因?yàn)閿橙说臄橙司褪桥笥眩部赡芙o出的
            信息根本描述不了它們的關(guān)系。
               看起來(lái)跟原始的并查集應(yīng)用差遠(yuǎn)了。。。
               有個(gè)比較直接的做法,那么就是把不在一個(gè)集合的節(jié)點(diǎn)直接用并查集合并在一起。這樣的話,
            如果詢問(wèn)的2個(gè)節(jié)點(diǎn)在同一個(gè)并查集里面,那么它們之間的關(guān)系是確定的,否則無(wú)法確定它們的
            關(guān)系。
               現(xiàn)在還有一個(gè)問(wèn)題是,在同一個(gè)并查集里面的2個(gè)節(jié)點(diǎn)是敵對(duì)關(guān)系還是朋友關(guān)系。。。
               可以給每個(gè)節(jié)點(diǎn)另外附加個(gè)信息,記錄其距離并查集根節(jié)點(diǎn)的距離。如果,詢問(wèn)的2個(gè)節(jié)點(diǎn)距離
            其根節(jié)點(diǎn)的距離都是奇數(shù)或者都是偶數(shù),那么這2個(gè)節(jié)點(diǎn)是朋友關(guān)系,否則是敵對(duì)關(guān)系。。。

               代碼如下:
            #include <stdio.h>
            #include <string.h>
            #include <algorithm>
            using namespace std;

            const int MAX_N = 100010;
            int nSets[MAX_N];
            int nDis[MAX_N];

            int nN, nM;

            void MakeSets(int nNum)
            {
                for (int i = 0; i < nNum; ++i)
                {
                    nSets[i] = i;
                    nDis[i] = 0;
                }
            }

            int FindSet(int nI)
            {
                if (nSets[nI] != nI)
                {
                    int nPre = nSets[nI];
                    nSets[nI] = FindSet(nSets[nI]);
                    nDis[nI] = (nDis[nI] + nDis[nPre]) % 2;
                }
                return nSets[nI];
            }

            void UnionSet(int nI, int nJ)
            {
                int nA = FindSet(nI);
                int nB = FindSet(nJ);
                if (nA != nB)
                {
                    nSets[nA] = nB;
                    nDis[nA] = (nDis[nI] + nDis[nJ] + 1) % 2;
                }
            }

            int main()
            {
                int nT;
                
                scanf("%d", &nT);
                while (nT--)
                {
                    scanf("%d%d", &nN, &nM);
                    MakeSets(nN);
                    char szOper[10];
                    int nA, nB;
                    while (nM--)
                    {
                        scanf("%s%d%d", szOper, &nA, &nB);
                        if (szOper[0] == 'D')
                        {
                            UnionSet(nA, nB);
                        }
                        else
                        {
                            int nX = FindSet(nA);
                            int nY = FindSet(nB);
                            if (nX == nY)
                            {
                                if (nDis[nA] == nDis[nB])
                                {
                                    printf("In the same gang.\n");
                                }
                                else
                                {
                                    printf("In different gangs.\n");
                                }
                            }
                            else
                            {
                                printf("Not sure yet.\n");
                            }
                        }
                    }
                }
                
                return 0;
            }

            posted on 2012-10-08 22:33 yx 閱讀(1110) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 數(shù)據(jù)結(jié)構(gòu)

            <2012年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)

            隨筆檔案

            me

            好友

            同學(xué)

            網(wǎng)友

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            欧美午夜A∨大片久久 | 久久久久久亚洲AV无码专区| 久久久久久久久久久久久久| 久久精品国产99久久久古代| 人妻少妇久久中文字幕一区二区| 精品久久久久久久无码| 久久久久亚洲AV成人网人人网站| 国产成人精品久久| 99久久综合国产精品二区| 伊人久久大香线蕉成人| 久久久亚洲欧洲日产国码aⅴ| 国产精品无码久久四虎| 亚洲av伊人久久综合密臀性色| 97超级碰碰碰碰久久久久| 伊人久久综合精品无码AV专区| 国内精品伊人久久久久网站| 亚洲午夜久久久久妓女影院| 精品欧美一区二区三区久久久| 久久久久高潮毛片免费全部播放| 亚洲人AV永久一区二区三区久久| 久久久久人妻一区精品色| 热久久最新网站获取| 久久久久国产日韩精品网站| 久久久综合九色合综国产| 无码日韩人妻精品久久蜜桃| 国内精品伊人久久久影院| 久久国产成人午夜AV影院| 94久久国产乱子伦精品免费| 久久国产精品成人影院| 日韩精品久久久肉伦网站| 久久精品国产乱子伦| 区久久AAA片69亚洲| 亚洲伊人久久成综合人影院 | 久久亚洲日韩看片无码| 精品久久久久久久久久中文字幕| 国内精品久久久久影院免费| 精品国产乱码久久久久久郑州公司 | 国产视频久久| 久久精品国产一区二区三区日韩| 亚洲国产精品无码久久久蜜芽 | 中文字幕乱码久久午夜|