花花的禮物 huahua

2022-09-01 05:06:09 字數 1842 閱讀 2097

from dtoj 1936

花花是個愛動腦子的孩子,在她的生日的時候,她的爸爸給她準備了個禮物。但是,她的爸爸並不想讓她輕易得到禮物,他把禮物放在了乙個箱子裡面,只有輸入正確的密碼才能開啟箱子,而她的爸爸告訴了她這個禮物該怎麼得到:

他們所在的城市可以看成有 nn

n 個點, mm

m 條邊的無向圖,每個點上有乙個權值 aia_iai

​,每條邊有乙個權值 www 。

我們定義兩個點 xx

x , yy

y 關於 kk

k 聯通當且僅當存在一條從 xx

x 到 yy

y 的路徑,滿足這條路徑上的 ww

w 的最大值小於等於 kkk 。

而密碼就是和節點 xx

x 關於 kk

k 聯通的所有節點的 aia_iai

​ 構成的集合 bb

b 的 summexsummexsu

mmex

。我們定義乙個可重複數集 bb

b 的 summexsummexsu

mmex

為無法用 bb

b 集合的子集的和表示的正整數的最小值。

例如,b=b=\b=

,他能表示 0{}0\

0 , 11\

1 , 22\

2 , 33\

3 , 44\

4 , 55\

5 ,但是他不能表示 66

6 ,所以 summexsummex\su

mmex

是 666。

由於她的爸爸有點健忘,他可能會記錯,所以會有多組( qq

q 組)詢問。對於每組詢問,你都要給乙個正確的答案。

為了提高難度,我們會對資料加密,對於乙個給定的數 ss

s ,解密輸入中的c++**是:

inline void decode(int &x, int &y)
其中的 lstanslstansls

tans

是上次詢問的答案。

考慮離線的做法

按照 kk

k 排序,每個點當做一棵線段樹,做最小生成樹的時候,把邊權 <=k<=k

<=k

的邊連線,並且線段樹合併到根上,然後按照神秘數的做法找出 ansansan

skru

skal

重構樹建出,然後每個點開一棵線段樹,然後往根合併上去,查詢的時候倍增找到其路徑上第乙個點權 <=k<=k

<=k

的線段樹,按照神秘數的做法即可

(注意原來的邊有 5e55e55e

5 條(一開始別的都對了,然後被這個坑了一晚上:(

上**

#include #define ll long long

using namespace std;

const int n=2e5+5;ll s[n*20],ans;

int head[n],v[n],nex[n],b[n],b,tt;

int n,m,q,s,a[n],tot,t,w[n],f[n];

int ls[n*20],rs[n*20],t[n],fa[n][20];

struct op[500005];

bool cmp(o a,o b)

int update(int x1,int x2)

ll query(int x,int l,int r,ll v)

void dfs(int x)

int main()

} return 0;

}

花花的森林

題目描述 花花有一棵帶n 個頂點的樹t,每個節點有乙個點權ai。有一天,他認為擁有兩棵樹更好一些。所以,他從t 中刪去了一條邊。第二天,他認為三棵樹或許又更好一些。因此,他又從他擁有的某一棵樹中去除了一條邊。如此往復。每一天,花花都會刪去一條尚未被刪去的邊,直到他得到了乙個包含了n 棵只有乙個點的樹...

花花的奶茶店

眾所周知,花花學長說自己要 從此要杜絕奶茶。但是某一天,花花學長聽說新開了一家奶茶店,他決定只是去奶茶店康一康。他初始在數字線上的點n 0 n 100,000 而奶茶店在同一數字線上的點k 0 k 100,000 花花學長有兩種移動方式 步行和傳送。行走 花花學長可以花費一分鐘從任意點x移至點x 1...

特殊的禮物

前言,六一這個開心快樂的日子曾經是我們童年時候最期待的日子,六一的到來總會令我們憶起最純真最快樂的童年。今年的六一,你還會期待嗎?我卻真的好期待六一能快點來臨,因為今年的六一不同於往年的六一,今年的六一我想給孩子,同時也給自己乙個難忘,開心,快樂的六一。世上只有媽媽好,有媽的孩子像個寶。美妙的 聲伴...