查看: 2069|回復: 1
打印 上一主題 下一主題

[CodeChef] LTIME21

[複製鏈接]
  • TA的每日心情
    開心
    2015-4-12 10:09
  • 簽到天數: 137 天

    [LV.7]常住居民III

    142

    主題

    686

    帖子

    3559

    積分

    邁向天堂

    蘇多門

    Rank: 8Rank: 8

    積分
    3559

    新手達陣台南一中資訊社程式設計達人 - 2014

    樓主
    發表於 2015-2-28 12:10:26 | 顯示全部樓層
    本帖最後由 domen111 於 2015-2-28 12:11 編輯

    Heavy-light Decompositions AC code:
    http://www.codechef.com/viewsolution/6361466
    英文的官方詳解: http://discuss.codechef.com/questions/64883/hldots-editorial


    題意:
    求有幾種樹練剖分方法數,一個合法的樹練剖分定義為從根節點到任意節點所經過的輕邊不得超過log2(N),N為節點總數。


    比賽時本來以為這題是應該照樹練剖分的方法去做,後來發覺就算不是依照樹練剖分的方法(重邊連到重兒子)也可能符合題目要求(log2)的性質。

    這題其實DP一下就行了
    dp[i ][j], i:節點編號, j:連到此節點前的輕邊數量, dp[i ][j]=方法數
    轉移時枚舉連接子節點的邊作為重邊,乘一乘計算方法數在加起來就行了
    計算連乘的時候不要太暴力直接乘,否則複雜度變成O(C[sup]2[/sup])(C為子節點數)就只能解出小測資,記得先預處理一下,轉移複雜度為O(C)、總複雜度為O(NlgN)就能完全AC。
    蘇多門 domen111
    My Web: https://sites.google.com/site/domenprg/
    回復 支持 反對

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表