• <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ù)組的標記,
            相當于map的實現(xiàn),通過這樣我把一個字符串和一個標號對應上了,方便了并查集的操作
            果然很久沒碰并查集了,一寫就出問題,
            主要是我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ù)組標記
            struct trie{
                struct trieNode{
            //trie結點的結構
                trieNode 
            *link[keyNum];//下標為 '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 閱讀(888) 評論(1)  編輯 收藏 引用 所屬分類: acm數(shù)據(jù)結構

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

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊友

            技術

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久婷婷色综合一区二区| 国产精品丝袜久久久久久不卡| 国产免费久久精品99久久| 欧美777精品久久久久网| 亚洲国产精品婷婷久久| 欧美久久久久久精选9999| 久久亚洲精品无码观看不卡| 久久久亚洲欧洲日产国码是AV| 一本久道久久综合狠狠爱| 久久亚洲AV成人无码国产| 99久久婷婷国产综合精品草原| 久久人妻少妇嫩草AV无码蜜桃 | 狠狠久久综合| 狠狠色丁香久久婷婷综合蜜芽五月| 无码精品久久久久久人妻中字 | 999久久久国产精品| 久久午夜免费视频| AA级片免费看视频久久| 亚洲AV日韩精品久久久久| 久久久精品日本一区二区三区| 亚洲综合日韩久久成人AV| 日产久久强奸免费的看| 久久亚洲国产午夜精品理论片| av色综合久久天堂av色综合在| 久久不射电影网| 99久久精品日本一区二区免费| 一本综合久久国产二区| 久久精品国产一区二区三区| 久久国产精品99国产精| 国内精品综合久久久40p| 狠狠色丁香久久婷婷综合_中| 久久精品中文字幕第23页| 亚洲精品国产成人99久久| 久久青青草原精品国产| 无码国内精品久久人妻蜜桃| 久久中文字幕人妻丝袜| 国产精品久久久香蕉| 久久久久久国产精品无码下载| 伊人久久大香线蕉综合网站| 亚洲欧洲久久久精品| 久久久久久精品无码人妻|