O ( n m ) O(nm) O(nm)暴力。
出题人开了时限 6 s 6s 6s,然后心机的让 m = 3 n m = 3n m=3n,
奈何 O ( n m ) O(nm) O(nm)跑过了 n = 30000 n = 30000 n=30000的点。
O ( n m w + n 2 ) O(\frac {nm}w + n^2) O(wnm+n2)算法:
每次合并的时候同时维护一个 u u u被多少个节点 v v v包含。
合并可以用 b i t s e t bitset bitset优化成 O ( n m w ) O(\frac {nm}w) O(wnm),
合并 u , v u,v u,v时可以考虑求出 S ( u ) x o r S ( v ) S(u) xor S(v) S(u)xorS(v)也就是集合中不同的点,然后对这些点维护一个 u u u被多少个节点 v v v包含,总共只会维护 O ( n 2 ) O(n^2) O(n2)次。
O ( m ) O(m) O(m)的解决先做完所有修改再询问的数据点的算法:
详见
O ( ( n + m ) log 2 n ) O((n+m)\log^2 n) O((n+m)log2n)正解:
这个这个,。。就是就是。。。。
离线分治回答询问,
维护时间点因为总变化量是 O ( m ) O(m) O(m)的
所以是需要快速找,暴力修改。
if(m==n*(n-1)/2)
{
mat t;t.a[0][0]=0;t.a[0][1]=P-1;t.a[1][0]=1;t.a[1][1]=n+2;
t=pw(t,k);int s=t.a[1][0];
printf("%d\n",1ll*pw(n,n-2)*pw(s,n-1)%P);
return 0;
}
n < = 5 n<=5 n<=5
写 B M BM BM
(不知道 ( n ∗ 100 ) 4 (n*100)^4 (n∗100)4怎么过的。)
下面:
数理知识
笛卡尔积:
说人话:你不需要知道什么是笛卡尔积。
很牛逼,我们又证明了一次某C定理。
这题就是不想让人过的。
resultant:上面的PPT中有,具体就是对特征值的操作什么的。
PS: 如果这个题是复制 k k k个图然后两两对应编号连边就简单多了,只需要求两次行列式即可简单个锤子。
T3:求 ∑ x = 1 n lcm ( x , x + 1 , … , x + k ) \sum\limits_{x = 1}^n \textrm{lcm}(x, x + 1, \dots, x + k) x=1∑nlcm(x,x+1,…,x+k)对 1 e 9 + 7 1e9+7 1e9+7 取模的结果。
猜想 x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) x* (x + 1)* \dots*(x + k) x∗(x+1)∗⋯∗(x+k)和 lcm ( x , x + 1 , … , x + k ) \textrm{lcm}(x, x + 1, \dots, x + k) lcm(x,x+1,…,x+k)有关。
令 f ( x ) = x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) lcm ( x , x + 1 , … , x + k ) f(x) = \frac {x* (x + 1)* \dots*(x + k)}{\textrm{lcm}(x, x + 1, \dots, x + k)} f(x)=lcm(x,x+1,…,x+k)x∗(x+1)∗⋯∗(x+k)
容易发现 f ( x ) f(x) f(x)是有周期的。
并且发现 16 16 16的周期是 720720 720720 720720,就可以愉快的拉格朗日插值 O ( k 2 ∗ 720720 ) O(k^2*720720) O(k2∗720720)得到 70 p t s 70pts 70pts.
可以 O ( k ∗ 720720 ) O(k*720720) O(k∗720720)
可以把求答案的式子化成 ∑ i = 0 n − r L c i ( L ∗ i + r k + 1 ) \sum_{i=0}^{\frac {n-r}L} c_i\binom{L * i + r}{k+1} ∑i=0Ln−rci(k+1L∗i+r)的形式。
再范德蒙德恒等式:
∑ i = 0 n − r L c i ∑ j = 0 i ( L ∗ i j ) ( r k + 1 − j ) = ∑ j = 0 i ( r k + 1 − j ) ∑ i = 0 n − r L c i ( L ∗ i j ) \sum_{i=0}^{\frac {n-r}L} c_i \sum_{j=0}^i \binom{L * i}{j} \binom{r}{k+1-j} = \sum_{j=0}^i \binom{r}{k+1-j}\sum_{i=0}^{\frac {n-r}L} c_i\binom{L * i}{j} ∑i=0Ln−rci∑j=0i(jL∗i)(k+1−jr)=∑j=0i(k+1−jr)∑i=0Ln−rci(jL∗i)
对于这个题 n − r L \frac {n-r}L Ln−r只有2个取值,所以预处理后面的 Σ \Sigma Σ然后就可以 O ( k ) O(k) O(k)算了。
发现 f ( x ) f(x) f(x)的质因数 ≤ k \leq k ≤k
猜想: f ( x ) f(x) f(x)中 p ( p r i m e ) p(prime) p(prime)的次数和 x ( m o d p e ) x\pmod {p^e} x(modpe)有关
然后就把 1...30 1...30 1...30的质数分成两组。
然后 L L L就是 3 e 5 3e5 3e5的级别,然后双指针套卷积合并组合形式幂级数的式子就可以卡过了。
牛逼做法
还需要优化:
如: k = 15 , ( m o d 13 ) k = 15 , \pmod {13} k=15,(mod13)时。
基础贡献加入反例,贡献乘起来,我在复读
就是把 x ( m o d p e ) x \pmod {p^e} x(modpe)的 p e p^e pe类强行用人类智慧减少讨论范围, k = 25 k=25 k=25时只有 4 e 5 4e5 4e5项容斥系数,可以直接过。
取模卡常小技巧
for
f += a * b
(f>=p^2) && (f -= p^2)
endfor
f %= p;
…
好像。。