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