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