【codeforces 766E】Mahmoud and a xor trip
生活随笔
收集整理的這篇文章主要介紹了
【codeforces 766E】Mahmoud and a xor trip
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】:http://codeforces.com/contest/766/problem/E
【題意】
定義樹上任意兩點之間的距離為這條簡單路徑上經過的點;
那些點上的權值的所有異或;
求任意兩點之間的距離和;
【題解】
權值最大為1e6
所以每個點的權值的二進制形式最多20位左右;
則我們可以對權值的二進制形式的每一位獨立考慮;
我們枚舉第i位;
并且在計算的時候只考慮這第i位;
可以做樹形dp;
算出穿過當前這個節點的路徑(并且以其為lca->最高點)
異或和的二進制形式在第i為上權值為1的路徑的個數x;
則(1<<i)?x就是答案了;
累加這個答案就好;
這里穿過當前這個節點且路徑的距離(異或和)在第i位的權值為1;
也就是說剩余的節點,要么左邊異或和為0且右邊異或和為1或者是左邊疑惑和為1右邊疑惑和為0;同時為1或同時為0都不行;
記錄每個節點下到該節點的異或和第i位為0和1的路徑個數就好;這個很容易維護的;
當然因為有說起點和終點可以相同;所以一開始累加a[i]值;
【完整代碼】
轉載于:https://www.cnblogs.com/AWCXV/p/7626477.html
總結
以上是生活随笔為你收集整理的【codeforces 766E】Mahmoud and a xor trip的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Effective Java》第8章
- 下一篇: 【Codeforces Round #4