• <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)容較長,點擊標題查看
            • --王私江
            久久人人爽人人爽人人片AV麻豆| 色偷偷偷久久伊人大杳蕉| 无码AV中文字幕久久专区| 久久99久久99小草精品免视看| 国内精品久久久久久久涩爱| 久久丫精品国产亚洲av不卡| 久久亚洲美女精品国产精品| 99久久国产综合精品网成人影院| 无码AV波多野结衣久久| 国产精品免费久久| 久久99国产精品99久久| 欧美性猛交xxxx免费看久久久| 日本久久久精品中文字幕| 老司机国内精品久久久久| 99久久国产宗和精品1上映| 精品久久久中文字幕人妻| 久久久久国产一区二区三区| 欧美777精品久久久久网| 蜜臀久久99精品久久久久久| 国产精品一区二区久久不卡 | 国产精品久久久久蜜芽| 国产日韩久久免费影院| 无码人妻久久一区二区三区免费丨| 久久中文娱乐网| 国产麻豆精品久久一二三| 2019久久久高清456| 狠狠色伊人久久精品综合网| 精品国产一区二区三区久久久狼| 少妇久久久久久被弄到高潮| 91精品国产91热久久久久福利| 国产成人精品白浆久久69| 亚洲国产精品无码久久| 青青草原综合久久大伊人| 日韩久久无码免费毛片软件| 国产AV影片久久久久久| 日本久久久久久中文字幕| 色综合久久最新中文字幕| 亚洲国产精品热久久| 久久亚洲综合色一区二区三区| 青青青国产成人久久111网站| 香港aa三级久久三级|