#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條評論
主站蜘蛛池模板: 成人久久| 一区二区日韩 | 欧美综合在线观看 | 一区二区免费 | 亚洲欧美v视色一区二区 | 激情伊人网 | 免费看的久久久久 | 久久小视频 | 日本国产最新一区二区三区 | 国产精品福利自产拍网站 | 国产免费福利视频一区二区 | 亚洲免费a| 亚洲午夜电影 | 日韩欧美一区二区三区视频 | 欧美成人一区二区 | 免费特黄一级欧美大片在线看 | 亚洲综合色视频在线观看 | 99久久免费国产精品 | 成年网站在线观看 | 超碰一区二区三区 | 成人性大片免费观看网站 | 久久中文字幕在线 | 午夜精品一区二区三区在线观看 | 毛片免费观看 | 久久久精品国产 | 免费一区 | 99精品欧美一区二区三区 | 91在线观看 | 日韩在线精品视频 | 免费精品美女久久久久久久久久 | 狠狠操电影 | 国产一区二区三区在线观看免费 | 亚洲电影一区二区 | 99精品视频在线 | 欧美激情视频一区二区免费 | 777奇米视频 | 国产欧美日韩在线不卡第一页 | 欧美精品在线一区 | 成人网18网站 | 亚洲日韩中文字幕一区 | 精品日韩 |