• <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 并查集

               并查集應用的變形。
               給出的是2個節點是敵對關系的信息,最后詢問任意2個節點的關系。根據這些信息,
            節點之間可能是敵對的,也可能不是的(因為敵人的敵人就是朋友),也可能給出的
            信息根本描述不了它們的關系。
               看起來跟原始的并查集應用差遠了。。。
               有個比較直接的做法,那么就是把不在一個集合的節點直接用并查集合并在一起。這樣的話,
            如果詢問的2個節點在同一個并查集里面,那么它們之間的關系是確定的,否則無法確定它們的
            關系。
               現在還有一個問題是,在同一個并查集里面的2個節點是敵對關系還是朋友關系。。。
               可以給每個節點另外附加個信息,記錄其距離并查集根節點的距離。如果,詢問的2個節點距離
            其根節點的距離都是奇數或者都是偶數,那么這2個節點是朋友關系,否則是敵對關系。。。

               代碼如下:
            #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 閱讀(1119) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學

            網友

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久曰本AV免费免费| 亚洲午夜久久久精品影院| 精品伊人久久大线蕉色首页| 亚洲AV日韩AV天堂久久| 18岁日韩内射颜射午夜久久成人| 久久久精品波多野结衣| 日本欧美久久久久免费播放网| 免费国产99久久久香蕉| 国产成人精品久久| 久久亚洲中文字幕精品一区| 国产亚洲色婷婷久久99精品| 久久久久久久精品妇女99| 99久久国产热无码精品免费久久久久| 久久久久久精品免费免费自慰| 88久久精品无码一区二区毛片 | 久久久久亚洲AV成人片| 精品久久久无码中文字幕| 国内精品伊人久久久久av一坑| 亚洲国产成人乱码精品女人久久久不卡| 蜜臀久久99精品久久久久久小说| 少妇久久久久久被弄到高潮| 国产精品日韩深夜福利久久 | 欧美激情精品久久久久久久| 99久久精品国产高清一区二区| 国产亚洲精品久久久久秋霞| 久久中文字幕视频、最近更新 | 久久97久久97精品免视看| 久久99精品国产麻豆宅宅| 久久99国产综合精品女同| 人人狠狠综合久久88成人| 久久婷婷五月综合97色一本一本 | 久久国产视屏| 久久久久亚洲爆乳少妇无| 久久免费99精品国产自在现线| 91精品国产91久久久久久蜜臀| 成人综合伊人五月婷久久| 2020最新久久久视精品爱| 狠狠色综合网站久久久久久久 | 久久久女人与动物群交毛片| av无码久久久久不卡免费网站 | 久久久久久久波多野结衣高潮|