#include#inc" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2278 0

題目鏈接

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

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

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

      #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(有向圖的歐拉路)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91日韩| 国产精品青草久久福利不卡 | 日本一区二区三区久久 | 麻豆精品国产免费观看 | 伊人伊人伊人伊人 | 四虎影视久久久免费 | 国产成人精品一区二区免费视频 | 中文在线亚洲 | 一级毛片免费播放 | 国产精品日本一区二区在线播放 | 久久综合草 | 成人亚洲网 | 伊人久久精品亚洲精品一区 | 欧美成人免费一区在线播放 | 色综合五月天 | 深夜男人网站 | 精品夜夜春夜夜爽久久 | 射婷婷| 久久久综合九色合综国产 | 亚洲精品一区二区三区中文字幕 | 久久爱伊人一区二区三区小说 | 亚洲mv在线观看 | 91婷婷色 | 欧美大香 | 爱神马午夜 | 国内精品视频在线播放一区 | 老司机精品99在线播放 | 欧美经典人人爽人人爽人人片 | 亚洲欧美在线观看91偷拍 | 国产一区二区三区成人久久片 | 性欧美video另类hd亚洲人 | α毛片 | 一级在线免费视频 | 国产精品免费大片一区二区 | 亚洲国产精品ⅴa在线观看 亚洲国产精品aa在线看 | 成人夜色视频在线观看网站 | 九九热免费视频 | 在线观看欧美精品 | 亚洲日本香蕉视频 | 一级黑人 | 国产99re |