• <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)計節(jié)點的度數(shù),奇點個數(shù)為0或2,存在歐拉路
            但這里是單詞作為點,所以要判斷
            怎么判斷呢,好多方法,hash,trie,map(目前還不會)
            這里我顯然用了trie這段時間學了這個,練下
            判歐拉圖,還是是連通的才可以,所以得判連通,用并查集即可
            或者麻煩的建圖,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
            ++;//奇點個數(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)  編輯 收藏 引用

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

            導航

            統(tǒng)計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內(nèi)容較長,點擊標題查看
            • --王私江
            免费国产99久久久香蕉| 亚洲精品乱码久久久久久蜜桃图片 | 久久香蕉国产线看观看精品yw| 久久男人Av资源网站无码软件| 久久久精品午夜免费不卡| 久久综合狠狠综合久久97色| 人人狠狠综合久久88成人| segui久久国产精品| 97久久国产综合精品女不卡| 久久综合综合久久狠狠狠97色88 | 久久99国产综合精品免费| 欧美激情精品久久久久久久| 国产精品久久久久久久| 一本久久免费视频| 久久亚洲国产中v天仙www | 久久久精品人妻一区二区三区四| 国产精品综合久久第一页| 亚洲色欲久久久综合网东京热| 99久久精品无码一区二区毛片| 色综合久久久久无码专区| 亚洲国产成人精品无码久久久久久综合| 一本久久a久久精品亚洲| 伊人情人综合成人久久网小说| 7国产欧美日韩综合天堂中文久久久久| 亚洲香蕉网久久综合影视| 久久精品亚洲福利| 国产精品久久久久乳精品爆| 精品午夜久久福利大片| 久久久久久久久无码精品亚洲日韩| 国内精品久久久久久久久电影网 | 欧美久久久久久精选9999| 国产精品一区二区久久精品无码 | 91视频国产91久久久| 久久久久AV综合网成人| 人妻精品久久无码区| 亚洲精品乱码久久久久久中文字幕| 狠狠色噜噜色狠狠狠综合久久| 伊人久久大香线焦AV综合影院| 久久精品国产99国产精品亚洲| 亚洲精品高清国产一线久久| 久久久无码精品亚洲日韩按摩|