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