#include#inc" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

HDU 1116 Play on Words(有向圖的歐拉路)

系統(tǒng) 2085 0

題目鏈接

首先這個題,我以為是DFS。。。交上各種TLE ,RE,暴棧和超時啊。。。找了一下題解,發(fā)現(xiàn)是圖論問題。。。唉。

又重新翻離散課本。。。定理:有向圖的歐拉路連通且存在一個出度比入度大一的,存在一個入度比出度大一的,其他入度出度相等。有向圖歐拉回路連通且入度出度都相等。

交上WA,然后查錯,總以為是 判斷是否是聯(lián)通的時候做錯了,其實是 忘記判斷也是歐拉回路了。。。悲劇。。。代碼 ?好爛。

      #include <stdio.h>
      
        

#include 
      
      <
      
        string
      
      .h>
      
        

#include 
      
      <stdlib.h>


      
        int
      
       p[
      
        27
      
      ][
      
        27
      
      ],z,n,o[
      
        27
      
      ],key[
      
        27
      
      
        ];


      
      
        int
      
       find(
      
        int
      
      
         x)

{

    
      
      
        int
      
      
         r,t;

    r 
      
      =
      
         x;

    
      
      
        while
      
      (x !=
      
         o[x])

    x 
      
      =
      
         o[x];

    
      
      
        while
      
      (r !=
      
         x)

    {

        t 
      
      =
      
         o[r];

        o[r] 
      
      =
      
         x;

        r 
      
      =
      
         t;

    }

    
      
      
        return
      
      
         x;

}


      
      
        void
      
       merge(
      
        int
      
       x,
      
        int
      
      
         y)

{

    x 
      
      =
      
         find(x);

    y 
      
      =
      
         find(y);

    
      
      
        if
      
      (x !=
      
         y)

    o[x] 
      
      =
      
         y;

}


      
      
        int
      
      
         main()

{

    
      
      
        int
      
      
         t,i,j,sum,start,end,len,sum1,sum2,k1,k2;

    
      
      
        char
      
       str[
      
        1001
      
      
        ];

    scanf(
      
      
        "
      
      
        %d%*c
      
      
        "
      
      ,&
      
        t);

    
      
      
        while
      
      (t--
      
        )

    {

        z 
      
      = 
      
        1
      
      ;k1 = k2 = 
      
        0
      
      
        ;

        memset(p,
      
      
        0
      
      ,
      
        sizeof
      
      
        (p));

        memset(key,
      
      
        0
      
      ,
      
        sizeof
      
      
        (key));

        
      
      
        for
      
      (i = 
      
        1
      
      ;i <= 
      
        26
      
      ;i ++
      
        )

        o[i] 
      
      =
      
         i;

        scanf(
      
      
        "
      
      
        %d%*c
      
      
        "
      
      ,&
      
        n);

        
      
      
        for
      
      (i = 
      
        1
      
      ;i <= n;i ++
      
        )

        {

            scanf(
      
      
        "
      
      
        %s
      
      
        "
      
      
        ,str);

            len 
      
      =
      
         strlen(str);

            start 
      
      = str[
      
        0
      
      ] - 
      
        '
      
      
        a
      
      
        '
      
      +
      
        1
      
      
        ;

            end 
      
      = str[len-
      
        1
      
      ] - 
      
        '
      
      
        a
      
      
        '
      
      +
      
        1
      
      
        ;

            key[start] 
      
      = key[end] = 
      
        1
      
      
        ;

            merge(start,end);

            p[start][end] 
      
      ++
      
        ;

        }

        
      
      
        for
      
      (i = 
      
        1
      
      ;i <= 
      
        26
      
      ;i ++
      
        )

        {

            
      
      
        if
      
      
        (key[i])

            
      
      
        break
      
      
        ;

        }

        sum 
      
      =
      
         find(i);

        
      
      
        for
      
      (j = i+
      
        1
      
      ;j <= 
      
        26
      
      ;j ++
      
        )

        {

            
      
      
        if
      
      (find(j) != sum &&
      
         key[j])

            
      
      
        break
      
      
        ;

        }

        
      
      
        if
      
      (j != 
      
        27
      
      
        )

        z 
      
      = 
      
        0
      
      
        ;

        
      
      
        for
      
      (i = 
      
        1
      
      ;i <= 
      
        26
      
      &&z;i ++
      
        )

        {

            sum1 
      
      = sum2 = 
      
        0
      
      
        ;

            
      
      
        for
      
      (j = 
      
        1
      
      ;j <= 
      
        26
      
      ;j ++
      
        )

            {

                sum1 
      
      +=
      
         p[i][j];

                sum2 
      
      +=
      
         p[j][i];

            }

            
      
      
        if
      
      (sum1 ==
      
         sum2)

            ;

            
      
      
        else
      
      
        if
      
      (sum1 == sum2+
      
        1
      
      
        )

            {

                k1
      
      ++
      
        ;

            }

            
      
      
        else
      
      
        if
      
      (sum1+
      
        1
      
       ==
      
         sum2)

            {

                k2 
      
      ++
      
        ;

            }

            
      
      
        else
      
      
        

            {

                z 
      
      = 
      
        0
      
      
        ;

                
      
      
        break
      
      
        ;

            }

        }

        
      
      
        if
      
      
        (z)

        {

            
      
      
        if
      
      (k1==
      
        1
      
      &&k2==
      
        1
      
      
        )

            printf(
      
      
        "
      
      
        Ordering is possible.\n
      
      
        "
      
      
        );

            
      
      
        else
      
      
        if
      
      (k1==
      
        0
      
      &&k2==
      
        0
      
      
        )

            printf(
      
      
        "
      
      
        Ordering is possible.\n
      
      
        "
      
      
        );

            
      
      
        else
      
      
        

            printf(
      
      
        "
      
      
        The door cannot be opened.\n
      
      
        "
      
      
        );

        }

        
      
      
        else
      
      
        

        printf(
      
      
        "
      
      
        The door cannot be opened.\n
      
      
        "
      
      
        );

    }

    
      
      
        return
      
      
        0
      
      
        ;

}
      
    

HDU 1116 Play on Words(有向圖的歐拉路)


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产高清在线精品免费 | 四虎影视在线看免费完整版 | 国产亚洲一区二区三区在线观看 | 国产成人精品一区二区在线 | 欧美不卡 | 99热最新网址 | 秋霞理论在线视频 | 91在线观看 | 日日摸夜夜爽 | 亚洲综合国产 | 国产高清在线精品免费 | 日本人与黑人xxxx | 91看片网| 97超碰免费 | 91久久线看在观草草青青 | 99久久综合给久久精品 | 精品一区二区三区在线观看 | 欧美特黄a级高清免费看片 欧美精品一二区 | 四虎影视永久免费观看网址 | 天堂在线91| 久草在线视频资源 | 精品久久国产 | 日本高清www无色夜在 | 久久综合图区亚洲综合图区 | www.夜夜操.com| 国产a区 | 日韩精品一区二区在线观看 | 毛片在线看片 | 亚洲精品亚洲人成人网 | 久久久综合九色合综国产 | 国产午夜精品AV一区二区 | 91精品一区二区三区久久久久久 | 国产一区二区三区免费 | 亚洲综合综合在线 | 久久草视频这里只精品99 | 欧美国产日韩在线观看 | 亚洲第一在线播放 | 天天久久 | 亚洲一二三区精品 | 丝袜天堂 | 欧美永久精品 |