有一天zsy在出大水题的时候,他遇到了一个小问题:如何随机生成一棵树?
当然这并没有难倒zsy:既然题目都这么水了,那数据水一水也未尝不可。他决定采用一种非常naive的方式随机生成一棵 个节点的树:对于每个节点 ,从节点 到 中随机选择一个节点作为其父节点。
于是zsy洋洋洒洒地写下了下面这份 gen.cpp
:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long int64;
int n;
int64 seed = 【数据删除】;
int64 rng(){
seed ^= seed << 4;
seed ^= seed >> 7;
seed ^= seed << 11;
return seed;
}
int main(){
for(int i = 2; i <= n; ++i)
fa[i] = 1 + rng() % (i - 1);
}
zsy把数据造完后,一不小心就把 gen.cpp
给删掉了。所幸的是 fa
数组被完整地保存了下来。现在zsy想知道,能否根据现有的数据来推断出 seed
的初值(代码中【数据删除】的部分)?