• <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>
            我叫張小黑
            張小黑的掙扎生活
            posts - 66,  comments - 109,  trackbacks - 0
            http://acm.pku.edu.cn/JudgeOnline/problem?id=2513
            這道題是直接拿前幾天寫得模版改的;做了幾個修改
            首先刪掉了search,這道題的確不需要,本來沒刪,代碼實在太長,逼得我沒辦法
            第二個,把trie中num[]的意思改掉了,num[]現(xiàn)在存的是字符串在一個數(shù)組的標(biāo)記,
            相當(dāng)于map的實現(xiàn),通過這樣我把一個字符串和一個標(biāo)號對應(yīng)上了,方便了并查集的操作
            果然很久沒碰并查集了,一寫就出問題,
            主要是我union_set是居然忘了要先find_set一下,這樣寫針對下面這組數(shù)據(jù)就會出現(xiàn)問題:
            a b
            b a
            a a
            還有一個就是這道題的空輸入問題,要輸出possible,而不是Impossible
            一下是我的垃圾代碼,跑了500多,有誰有更好的發(fā)我郵箱哈: zhangjia888334@sohu.com
            #include<iostream>
            #include
            <cstring>
            #define keyNum 
            26
            #define MaxN 
            500005
            struct node{
                
            int parent;
                
            int rank;
                
            int num;//這個顏色出現(xiàn)的次數(shù)
                node()
                {
                    num
            =rank=0;
                    parent
            =-1;
                }
            };
            node colour[MaxN];
            int id=0;//數(shù)組標(biāo)記
            struct trie{
                struct trieNode{
            //trie結(jié)點的結(jié)構(gòu)
                trieNode 
            *link[keyNum];//下標(biāo)為 'a' , 'b' , 'c' ,  , 'z' 的指針數(shù)組
                int num[keyNum];//插入這個單詞在數(shù)組中的位置
                trieNode(){
                    memset(num,
            -1,sizeof(num));//-1表示還未插入數(shù)組
                    memset(link,
            NULL,sizeof(link));
                    }
                void init(){
                    memset(link,
            NULL,sizeof(link));
                    memset(num,
            -1,sizeof(num));
                }
                };
                trieNode
            * root;
                trie()
                {
                    root
            =(trieNode*)malloc(sizeof(trieNode));//初始化時為root申請了空間
                    root
            ->init();
                }
                
            int Insert(char []);//返回數(shù)組中的位置
                void Delete(trieNode
            *);//釋放空間
            };
            void trie::Delete(trieNode
            * t)
            {
                
            int i;
                
            for(i=0;i<keyNum;i++)
                    
            if(t->link[i])Delete(t->link[i]);
                memset(t
            ->num,0,sizeof(t->num));
                delete(t);
            }
            int trie::Insert(char x[])
            {
                trieNode 
            *current=root;
                
            int i=1;
                
            while(x[i]){
                    
            if(current->link[x[i-1]-'a']==NULL){
                        current->link[x[i-1]-'a']=(trieNode*)malloc(sizeof(trieNode));
                        (current->link[x[i-1]-'a'])->init();
                    }
                    current
            =current->link[x[i-1]-'a'];
                    i++;
                }
                
            if(current->num[x[i-1]-'a']==-1)
                    current->num[x[i-1]-'a']=id++;
                colour[current->num[x[i-1]-'a']].num++;//出現(xiàn)的次數(shù)++
                return current->num[x[i-1]-'a'];
            }
            void init()
            {
                
            int i;
                
            for(i=0;i<MaxN;i++)
                    colour[i].parent
            =i;
            }
            void union_set(
            int x,int y)
            {
                
            if(colour[x].rank>colour[y].rank)
                    colour[y].parent
            =x;
                
            else {
                    colour[x].parent
            =y;
                    
            if(colour[x].rank==colour[y].rank)
                        colour[y].rank
            ++;
                }
            }
            int find_set(int x)
            {
                
            if(x!=colour[x].parent)
                    colour[x].parent
            =find_set(colour[x].parent);
                return colour[x].parent;
            }
            bool comman_father()
            {
                
            int i,p=0;
                p
            =find_set(0);
                
            for(i=1;i<id;i++)
                    
            if(find_set(i)!=p)return false;
                return 
            true;
            }
            void solve()
            {
                
            if(comman_father()==false){
                    printf(
            "Impossible\n");
                    return;
                }
                
            int i,head_end=0;
                
            for(i=0;i<id;i++)
                    
            if(colour[i].num%2==1)//判斷頭和尾
                        head_end
            ++;
                
            if(head_end==2||!head_end)//一個沒回路,一個是有回路
                    printf(
            "Possible\n");
                
            else printf("Impossible\n");
            }
            int main()
            {
                char colr1[
            12],colr2[12];
                trie a;
                
            int ncolr1,ncolr2;
                init();
                
            while(scanf("%s%s",colr1,colr2)!=EOF){
                    ncolr1
            =a.Insert(colr1);
                    ncolr2
            =a.Insert(colr2);
                    union_set(find_set(ncolr1),find_set(ncolr2));
                }
                
            //下面判斷有幾個parent,若有多個失敗
                solve();
                a.Delete(a.root);
                return 
            0
            }
            posted on 2008-04-08 18:35 zoyi 閱讀(884) 評論(1)  編輯 收藏 引用 所屬分類: acm數(shù)據(jù)結(jié)構(gòu)

            FeedBack:
            # re: trie樹+并查集
            2008-04-08 19:41 | arena_zp
            不知道為什么,
            我的始終在 1300 + 。。
            莫名~~~~~  回復(fù)  更多評論
              
            歡迎光臨 我的白菜菜園

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊友

            技術(shù)

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            色综合久久无码中文字幕| 国产精品VIDEOSSEX久久发布| 久久男人AV资源网站| 久久久久高潮综合影院| 亚洲国产另类久久久精品| 欧美精品一本久久男人的天堂| 久久精品免费网站网| 无码AV波多野结衣久久| 成人妇女免费播放久久久| 精品国产青草久久久久福利 | 麻豆久久久9性大片| 日本人妻丰满熟妇久久久久久| 精品精品国产自在久久高清| 亚洲国产视频久久| 久久国产精品国产自线拍免费| 亚州日韩精品专区久久久| 国内精品久久久久久野外| 久久天天躁狠狠躁夜夜不卡| 国产精品狼人久久久久影院| 91久久婷婷国产综合精品青草 | 久久93精品国产91久久综合| 亚洲中文久久精品无码| 亚洲欧洲中文日韩久久AV乱码| 色综合久久综合网观看| 久久99精品久久久久久动态图 | 久久久噜噜噜久久| 久久免费视频观看| 久久婷婷激情综合色综合俺也去| 青青青青久久精品国产h久久精品五福影院1421 | 性高湖久久久久久久久| 久久影院午夜理论片无码 | 91精品国产91久久久久久| 久久精品国产亚洲AV麻豆网站| 中文字幕久久久久人妻| 亚洲国产综合久久天堂| 久久精品无码av| 欧美久久综合九色综合| 午夜精品久久影院蜜桃| 国内精品久久久久久久久电影网| 色综合久久中文字幕综合网| 欧美黑人激情性久久|