Codeforces Round #700 (Div. 1) C. Continuous City 构造 + 二进制
傳送門
文章目錄
- 題意:
- 思路:
題意:
構(gòu)造一個圖,使其從111到nnn的路徑的長度與[L,R][L,R][L,R]中某個值一一對應(yīng),不能有兩條路徑長度一樣,且每個值都必須出現(xiàn)一次,每兩個點之間只能連一條邊。
n≤32n\le32n≤32,ai,bi≤na_i,b_i\le nai?,bi?≤n,1≤ci≤1e61\le c_i\le 1e61≤ci?≤1e6。
思路:
看到n≤32n\le 32n≤32,不難想到二進(jìn)制拆分,我們分情況來討論。
(1)L=1,R=2k(1)\ \ L=1,R=2^k(1)??L=1,R=2k
對于這種情況,我們需要拿出來k+2k+2k+2個點,從111向[2,k+2][2,k+2][2,k+2]的點連邊權(quán)為111的邊,讓后對于后面的每一個位置iii,都向后連邊權(quán)為2i?22^{i-2}2i?2的邊,這樣就可以構(gòu)造出[1,2k][1,2^k][1,2k]內(nèi)的邊權(quán)了。
(2)L=1,R>1(2)\ \ L=1,R>1(2)??L=1,R>1
對于這種情況,我們依舊按照(1)(1)(1)的思路構(gòu)造出[1,2k][1,2^k][1,2k]的邊權(quán),讓后再新加一個點k+3k+3k+3,考慮用新的點來構(gòu)造出來[2k+1,R][2^k+1,R][2k+1,R]的邊權(quán)。
對于RRR,他的二進(jìn)制形式大概是這樣的100100100...100100100...100100100...,很明顯,我們可以根據(jù)111來分段,因為我們已經(jīng)構(gòu)造出來了[1,2i][1,2^i][1,2i],即[1,1000..][1,1000..][1,1000..],假設(shè)RRR的從低位到高位的第iii位(從000開始)是111,那么我們只需要從i+2i+2i+2的位置向k+3k+3k+3連一個RRR將iii位及其之后的數(shù)都變成000的邊權(quán),但是這樣會有點問題,就是因為構(gòu)造的是[1,2i][1,2^i][1,2i],缺少000,那么連完之后也就缺少后面全000的邊權(quán)。所以我們考慮將R?1R-1R?1之后建邊,在新邊的邊權(quán)都+1+1+1即可。
(3)L>1,R>1(3)\ \ L>1,R>1(3)??L>1,R>1
只需要在最后新加一個點,在原來的最后一個點向他連l?1l-1l?1的邊即可,轉(zhuǎn)化成情況(1)(1)(1)或(2)(2)(2)。
總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #700 (Div. 1) C. Continuous City 构造 + 二进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13岁小孩子如何减肥
- 下一篇: Codeforces Global Ro