• <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[]現在存的是字符串在一個數組的標記,
            相當于map的實現,通過這樣我把一個字符串和一個標號對應上了,方便了并查集的操作
            果然很久沒碰并查集了,一寫就出問題,
            主要是我union_set是居然忘了要先find_set一下,這樣寫針對下面這組數據就會出現問題:
            a b
            b a
            a a
            還有一個就是這道題的空輸入問題,要輸出possible,而不是Impossible
            一下是我的垃圾代碼,跑了500多,有誰有更好的發我郵箱哈: zhangjia888334@sohu.com
            #include<iostream>
            #include
            <cstring>
            #define keyNum 
            26
            #define MaxN 
            500005
            struct node{
                
            int parent;
                
            int rank;
                
            int num;//這個顏色出現的次數
                node()
                {
                    num
            =rank=0;
                    parent
            =-1;
                }
            };
            node colour[MaxN];
            int id=0;//數組標記
            struct trie{
                struct trieNode{
            //trie結點的結構
                trieNode 
            *link[keyNum];//下標為 'a' , 'b' , 'c' ,  , 'z' 的指針數組
                int num[keyNum];//插入這個單詞在數組中的位置
                trieNode(){
                    memset(num,
            -1,sizeof(num));//-1表示還未插入數組
                    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 []);//返回數組中的位置
                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++;//出現的次數++
                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 閱讀(885) 評論(1)  編輯 收藏 引用 所屬分類: acm數據結構

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

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

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊友

            技術

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲AV无码一区东京热久久| 狠狠狠色丁香婷婷综合久久五月| 精品人妻伦一二三区久久| 亚洲国产精品一区二区久久| 久久人人爽人人爽人人片AV东京热 | 欧美久久久久久午夜精品| 久久精品免费网站网| 亚洲av成人无码久久精品| 国内精品久久久久久不卡影院| 久久久午夜精品| 99久久综合国产精品二区| 久久精品国产久精国产果冻传媒| 久久男人Av资源网站无码软件 | 91精品国产91久久久久久蜜臀| 伊人久久大香线蕉成人| 久久精品成人免费网站| 亚洲精品无码久久久久久| 久久久久无码专区亚洲av| av无码久久久久不卡免费网站 | 亚洲日韩中文无码久久| 久久影视综合亚洲| 狠狠综合久久综合中文88| 97久久久久人妻精品专区| 久久99久国产麻精品66| 久久性精品| 久久天天躁狠狠躁夜夜av浪潮| 久久99精品久久只有精品| 伊人久久大香线蕉综合影院首页| 成人a毛片久久免费播放| 91精品国产色综合久久| 亚洲愉拍99热成人精品热久久| 亚洲国产成人久久精品99 | 久久久久国色AV免费看图片| 亚洲伊人久久大香线蕉苏妲己| 国产精品久久久久久福利漫画| 久久精品aⅴ无码中文字字幕重口| 久久久亚洲AV波多野结衣| 久久亚洲国产精品成人AV秋霞| 国产精品一区二区久久精品涩爱| 性做久久久久久久久久久| 人妻无码精品久久亚瑟影视|