#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條評論
主站蜘蛛池模板: 精品国产一级毛片大全 | 国产精品久久久久久婷婷天堂 | 狠狠色噜噜狠狠狠97影音先锋 | 成人精品鲁一区一区二区 | 爽爽影院在线看 | www噜噜偷拍在线视频 | 国产欧美在线观看视频 | 精品欧美一区二区三区 | 杀破狼在线观看 | 91精品国产91久久久久久最新 | 91成人影院未满十八勿入 | 国产秋霞 | 欧美一级欧美一级高清 | 丁香激情五月 | 开心综合 | 欧美午夜精品一区二区蜜桃 | 国产一区二 | 九九99国产精品视频 | 国产精品国产成人国产三级 | 妞干网在线观看 | 亚洲成人日韩 | 亚洲综合影院 | 日韩在线视频观看 | 成人综合久久综合 | 一区二区三区免费视频 www | 激情视频免费在线观看 | 久久精品久久精品 | 偿还的影视高清在线观看 | 99精品一区二区 | 天堂热| 男人的天堂av2017在线 | 九九精品视频在线播放 | 亚洲有码转帖 | 久草热久草在线 | 中文视频在线 | 毛片啪啪 | 亚洲精品一区在线 | 热久久精品在线 | 亚洲精品久久午夜无码一区二区 | 国产AV一区二区三区传媒 | 国产无遮挡一级毛片 |