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

            poj2513

            Colored Sticks

            Time Limit: 5000MS Memory Limit: 128000K
            Total Submissions: 24238 Accepted: 6381

            Description

            You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a straight line such that the colors of the endpoints that touch are of the same color?

            Input

            Input is a sequence of lines, each line contains two words, separated by spaces, giving the colors of the endpoints of one stick. A word is a sequence of lowercase letters no longer than 10 characters. There is no more than 250000 sticks.

            Output

            If the sticks can be aligned in the desired way, output a single line saying Possible, otherwise output Impossible.

            Sample Input

            blue red
            red violet
            cyan blue
            blue magenta
            magenta cyan
            

            Sample Output

            Possible

            Hint

            Huge input,scanf is recommended.

            早起一水
            囧呆了
            給很多木棍,兩端有顏色,問能不能是這些木棍首尾相接,并且保證相連接處顏色相同
            一筆畫問題,判斷歐拉路
            統(tǒng)計(jì)節(jié)點(diǎn)的度數(shù),奇點(diǎn)個(gè)數(shù)為0或2,存在歐拉路
            但這里是單詞作為點(diǎn),所以要判斷
            怎么判斷呢,好多方法,hash,trie,map(目前還不會(huì))
            這里我顯然用了trie這段時(shí)間學(xué)了這個(gè),練下
            判歐拉圖,還是是連通的才可以,所以得判連通,用并查集即可
            或者麻煩的建圖,dfs一遍

            father數(shù)組忘記初始化了,wa一次
            改后忘記注視freopen了,wa一次
            #include <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <ctime>
            #include 
            <cassert>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <fstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <iomanip>
            using namespace std;
            int cnt;
            struct node
            {
                
            int next[26];
                
            int count;
                
            int key;
                
            void init()
                
            {
                    memset(next,
            -1,sizeof(next));
                    count
            =0;
                }

            }
             s[6000005];
            int father[250005],count1[250005],sind;
            void cas_init()
            {
                s[
            0].init();
                sind
            =1;
            }

            int ins(char str[])
            {
                
            int len=strlen(str);
                
            int i,j,ind;
                ind
            =0;
                
            for(i=0; i<len; i++)
                
            {
                    j
            =str[i]-'a';
                    
            if(s[ind].next[j]==-1)
                    
            {
                        s[sind].init();
                        s[ind].next[j]
            =sind++;
                    }

                    ind
            =s[ind].next[j];
                }

                
            if(s[ind].count==0)
                
            {
                    s[ind].key
            =cnt++;
                }

                s[ind].count
            ++;
                
            return s[ind].key;
            }

            int find(int x)
            {
                
            if(x==father[x]) return x;
                
            else
                
            {
                    father[x]
            =find(father[x]);
                    
            return father[x];
                }

            }

            void un(int a,int b)
            {
                father[find(a)]
            =find(father[b]);
            }

            int main()
            {
                
            int ca,cb;
                
            char str1[21],str2[21];
                cas_init();
                cnt
            =0;
                memset(count1,
            0,sizeof(count1));
                
            for(int i=0; i<250005; i++) father[i]=i;
                
            //freopen("in1.txt","r+",stdin);
                while(scanf("%s%s",str1,str2)!=EOF)
                
            {
                    
            //puts(str1);puts(str2);
                    ca=ins(str1);
                    cb
            =ins(str2);
                    
            //cout<<ca<<" "<<cb<<endl;
                    count1[ca]++;
                    count1[cb]
            ++;
                    un(ca,cb);
                }

                
            if(cnt==0)
                
            {
                    printf(
            "Possible\n");
                }

                
            else
                
            {
                    
            int tmp;
                    tmp
            =0;
                    
            for(int i=0; i<cnt; i++)
                        
            if(count1[i]%2==1)
                            tmp
            ++;//奇點(diǎn)個(gè)數(shù)
                    ca=find(0);
                    
            for(int i=1; i<cnt; i++)
                        
            if(ca!=find(i))
                        
            {
                            tmp
            =-1;
                            
            break;
                        }

                    
            //printf("%d\n",cnt);
                    if(tmp==0||tmp==2)
                        printf(
            "Possible\n");
                    
            else printf("Impossible\n");
                }

                
            //fclose(stdin);
                return 0;
            }



            posted on 2012-07-17 08:13 jh818012 閱讀(212) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當(dāng)于是 取余3的意思 因?yàn)?3 的 二進(jìn)制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
            • --王私江
            亚洲国产精品无码久久一线| 久久久久亚洲AV综合波多野结衣| 久久免费国产精品| 精品久久久久久无码人妻热| 久久国产精品二国产精品| 国产A级毛片久久久精品毛片| 久久精品国产只有精品66| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲熟妇无码另类久久久| 久久久久亚洲精品日久生情| 久久超碰97人人做人人爱| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲国产精品久久久久网站 | 99久久精品免费看国产免费| 亚洲国产成人久久综合一 | 精品免费tv久久久久久久| 一本久久综合亚洲鲁鲁五月天| 精品人妻久久久久久888| 国产精品美女久久久免费| 91精品国产高清久久久久久io| 久久久久久久综合狠狠综合| 亚洲国产精品久久66| 乱亲女H秽乱长久久久| 精品久久久久久无码专区 | 国产精品久久一区二区三区| 狼狼综合久久久久综合网| 亚洲国产另类久久久精品小说| 亚洲国产成人精品女人久久久 | 人妻精品久久无码区 | 久久亚洲国产欧洲精品一| 久久亚洲国产成人精品性色| 国产一级持黄大片99久久| 国内精品伊人久久久久网站| 色狠狠久久综合网| 99麻豆久久久国产精品免费| 久久久精品人妻无码专区不卡| 久久久久18| 国产精品成人99久久久久 | 久久精品无码专区免费青青| 国产三级久久久精品麻豆三级| 伊人久久综合热线大杳蕉下载|