uint64_t sd;uint64_trnd(){
sd ^= sd <<13, sd ^= sd >>7;return sd ^= sd <<17;}uint64_tsplitmix64(uint64_tx){
x +=0x9e3779b97f4a7c15;
x =(x ^(x >>30))*0xbf58476d1ce4e5b9;
x =(x ^(x >>27))*0x94d049bb133111eb;return x ^(x >>31);}
主函数部分:
cin >> n >> m >> sd, sd =splitmix64(sd);for(int i =1; i <= n;++i) a[i]=(uint32_t)rnd();// 假设 a 为点权数组,注意其类型为 int。
while(m--){int u =rnd()% n +1, v =rnd()% n +1;if(is_connected(u, v))
sd ^=query(u, v);elseunite(u, v);// 假设三个函数的功能分别为:判断是否联通;查询最大子段和;连边。
}
cout << sd << endl;