1. 程式人生 > >2017年icpc西安網絡賽 Maximum Flow (找規律+數位dp)

2017年icpc西安網絡賽 Maximum Flow (找規律+數位dp)

ron 結果 anti 成了 flow http cpc 求和 找規律

題目

  https://nanti.jisuanke.com/t/17118

題意

  有n個點0,1,2...n-1,對於一個點對(i,j)滿足i<j,那麽連一條邊,邊權為i xor j,求0到n-1的最大流,結果取模,n<=1e18

分析

  可以寫個最大流對數據找規律,但沒找出來……

  然後只能取分析了,首先最大流等價於最小割

  明確一定,0->n-1這個要先割掉

  然後我們貪心,希望有一些點割掉與0相連的邊,一些點割掉與n-1相連的邊

  我們去觀察每個點與0相連和與n-1相連的兩條邊權值,容易發現前面若幹個左邊那條邊邊權小,後面若幹個右邊那條邊邊權小

  我們可以把前半部分的取左邊,後半部分取右邊,具體的,分界線就是n-1二進制最高位1對應的數字

  然後問題就變成求他們的和,第一部分好求,主要第二部分求和

  轉換一下問題,變成了求1 xor x + 2 xor x + 3 xor x + ... + n xor x

  這裏可以數位dp解決,值得註意的是這裏數位dp求的是滿足數位的和,要先一遍數位dp求出對應狀態的數字個數,然後再一遍數位dp求出貢獻

2017年icpc西安網絡賽 Maximum Flow (找規律+數位dp)