【loj2983】【WC2019】数树】的更多相关文章

题目链接 LOJ:https://loj.ac/problem/2983 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5475 洛谷:https://www.luogu.org/problemnew/show/P5206 Soltion 超级毒瘤数数题...窝看了一晚上才看懂... %%%rqy subtask 0 很容易可以看出每个公共的边连成的联通块被绑一起了,所以答案就是\(y^{p}\),其中\(p\)为联通块个数. 也就是说答案为…
[WC2019] 数树 Zhang_RQ题解(本篇仅概述) 前言 有进步,只做了半天.... 一道具有极强综合性的数数好题! 强大的多合一题目 精确地数学推导和耐心. 有套路又不失心意. 融合了: 算法: prufer序列及其扩展 树形Dp 容斥或者二项式定理 EGF 多项式Exp 先要会: [学习笔记]prufer序列 [学习笔记]多项式指数函数 [学习笔记]生成函数 luoguP4841 城市规划 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2) 然后开始刚题. 就是:…
一道技巧性非常强的计数题,历年WC出得最好(同时可能是比较简单)的题目之一. 题目传送门:洛谷P5206. 题意简述: 给定 \(n, y\). 一张图有 \(|V| = n\) 个点.对于两棵树 \(T_1=G(V, E_1)\) 和 \(T_2=G(V, E_2)\),定义这两棵树的权值 \(F(E_1, E_2)\) 为 \(y\) 的 \(G'=(V,E_1\cap E_2)\) 的联通块个数次方. 即 \(F(E_1, E_2) = y^{n - |E_1\cap E_2|}\)(因为…
题目大意 task0:有两棵\(n\)(n\leq10^5)个点的树\(T1,T2\),每个点的点权可以是一个在\([1,y]\)里的数,如果两个点既在\(T1\)中有直接连边,又在\(T2\)中有直接连边,那么它们的点权必须相同.求有多少种分配点权的方案. task1:有一棵\(n\)个点的树\(T1\),给定\(y\),求\(T2\)所有形态的task1之和\(mod 998244353\) task2:给定\(n,y\),求\(T1\)所有形态的task2之和\(mod 998244353…
传送门 Orz神仙题,让我长了许多见识. 长式子警告 思路 y=1 由于y=1时会导致后面一些式子未定义,先抓出来. printf("%lld",opt==0?1:(opt==1?ksm(n,n-2):ksm(n,2*n-4)))即可. opt=0 这没什么好说的--统计有多少条边重合即可. opt=1 为了方便,以下令\(bas=y^{-1}\). 以下所有集合都为一棵树/一个森林的边集. 先从暴力开始推起: \[ ans=\sum_{T2} bas^{|T1\cap T2|-n}=…
题面 传送门 前置芝士 矩阵树,基本容斥原理,生成函数,多项式\(\exp\) 题解 我也想哭了--orz rqy,orz shadowice 我们设\(T1,T2\)为两棵树,并定义一个权值函数\(w(T1,T2)=y^{n-|T1\cap T2|}\),其中\(|T1\cap T2|\)为两棵树共同拥有的边的数目 显然,\(w(T1,T2)\)就是两棵树在该情况下的方案个数,因为\(T1\cap T2\)后的图中每个连通块只能用同一种颜色,而\(n-|T1\cap T2|\)就是连通块个数…
题目链接 题意 定义 \(F(T_1,T_2)=y^{n-common}\) 其中 \(common\) 为两棵树 \(T_1,T_2\) 的公共边条数. 三种问题 1.给定 \(T_1,T_2\) 2.给定 \(T1\),\(T_2\)任意 3.均任意 Sol 第一种 std::set<int> 存边即可 这道题的关键在第二问. 考虑要求的式子: 我们令 \(c\) 是重边条数. \[ans=\sum_{T_2} y^{n-c}=y^n\sum_{T_2}y^{-c}\] 一个显然的想法就是…
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1\cap E_2\) 的连通块次方,又显然 \(E_1,E_2\) 的导出子图是一棵森林,因此 \(E_1\cap E_2\) 连通块个数就是 \(n-|E_1\cap E_2|\),因此我们要求的答案就是 \(\sum\limits_{E_1}\sum\limits_{E_2}y^{n-|E_1\…
因为一大堆式子实在懒得写题解了.首先用prufer推出CF917D用到的结论,然后具体见前言不搭后语的注释. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<map> using namespace std; #define ll long…
简要题意 给定 \(n, y\). 一张图有 \(|V| = n\) 个点,现在给出两棵树 \(T_1=G(V, E_1)\) 和 \(T_2=G(V, E_2)\). 定义这两棵树的权值 \(F(E_1, E_2)\) 为 \(y\) 的 \(G'=(V,E_1\cap E_2)\) 的联通块个数次方. 即 \(F(E_1, E_2) = y^{n - |E_1\cap E_2|}\),给定 \(E_1\),计算 \(\sum_{E_2} F(E_1, E_2)\). 其中 \(n\le 10…
WC2019 数树 解决了一个心头大患 考试的时候本人太智障了QwQ 本文的参考链接,膜了一发rqy的题解 题目链接 Subtask 0 好像可以直接做... 推一推就能发现,是$y^k$,其中$k$表示相同的边构成的联通块数... (我在考试的时候,丝毫都没有意识到这是$n-边数$ namespace Subtask1 { int main() { int cnt=n; for(int x=1;x<=n;x++) { for(int i=head[x];i!=-1;i=e[i].next) {…
LOJ2983. 「WC2019」数树 task0 有\(i\)条边一样答案就是\(y^{n - i}\) task1 这里有个避免容斥的方法,如果有\(i\)条边重复我们要算的是\(y^{n - i}\),设\(a = y^{-1}\)那么我们可以对于选了i条边的方案算\(a^{i}\) 可是这样需要容斥,所以有个神奇的技巧 \((a - 1 + 1)^{i} = \sum_{j = 0}^{i}(a - 1)^{j}\binom{i}{j}\) 这样,对于至少选了\(j\)条边的方案,每选一…
WC2019 T1 数树 传送门(https://loj.ac/problem/2983) Question 0 对于给定的两棵树,设记两颗树 \(A,B\) 的重边数量为 \(R(A,B)\),那么 \[ Ans=y^{n-R(A,B)} \] Question 1 给定其中一棵树,求第二棵树的所有情况下答案的总和 不妨令 \(y=y^{-1}\) ,最终答案就是 \(y^{-n}y^{R(A,B)}\). 在给定 \(A\) 的情况下,只需要统计 \(\sum\limits_B y^{R(A…
「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\exp\) 是真的神仙,做不出来当然很正常,而且我当时也不怎么会多项式. Task0 考虑公共边组成 \(k\) 个联通块,答案就是 \(y^k\) ,并查集维护一下即可,复杂度 \(\mathcal O(n\log n)\) . code namespace task0{ map<pair<int,…
T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) 直接去掉绝对值. 然后就可以推出如下柿子: \[\displaystyle\sum_{l=1}^{k}-a_l\times(k-l)+\sum_{r=2}^{k}a_r\times a_r(r-1) \] \[\displaystyle\sum_{i=1}^{k}a_i\times (2\times i-…
题目 两颗\(n\)个点的树T1和T2,有\(y\)种颜色; 现在给每个点染色,要求公共边端点的颜色相同,求: ​ 1.op=0 , T1和T2都确定,求合法染色方案数: ​ 2.op=1 , T1确定,求所有T2的合法染色方案数的和 ; ​ 3.op=2 , 求所有(T1,T2)合法染色方案数的和: \(mod \ 998244353\)的值: $1 \le n \le 10^5  ,  1 \le y \lt 998244353  ,  op = { 0,1,2 } $ ; 题解 op=0…
题目大意 有两棵 \(n\) 个点的树 \(T_1\) 和 \(T_2\). 你要给每个点一个权值吗,要求每个点的权值为 \([1,y]\) 内的整数. 对于一条同时出现在两棵树上的边,这条边的两个端点的值相同. 若 \(op=0\),则给你两棵树 \(T_1,T_2\),求方案数. 若 \(op=1\),则给你一棵树 \(T_1\),求对于所有 \(n^{n-2}\) 种 \(T_2\),方案数之和. 若 \(op=2\),则求对于所有的 \(T_1,T_2\),求方案数之和. \(n\leq…
传送门 抄题解 \(Task0\),随便做一下,设 \(cnt\) 为相同的边的个数,输出 \(y^{n-cnt}\) \(Task1\),给定其中一棵树 设初始答案为 \(y^n\),首先可以发现,每有一条边和给定的树相同就会使得答案除去 \(y\) 那么可以利用矩阵树定理,已经有的边权值为 \(y^{-1}\),其它的连成完全图,权值为 \(1\) 求解行列式之后乘上 \(y^n\) 即可,\(O(n^3)\) 第一种正解 \(orz~laofu\) 即可 不会 第二种正解 一个小trick…
Description 此题含有三个子问题 问题1: 给出n个点的两棵树,记m为只保留同时在两棵树中的边时连通块的个数,求\(y^m\) 问题2: 给出n个点的一棵树,另外一棵树任意生成,求所有方案总的\(y^m\)的和 问题3: 两棵树均任意生成,求所有方案总的\(y^m\)的和 n<=100000,答案对998244353取模 Solution 问题1: 求出同时在两棵树中的边数v,容易得到m=n-v,直接算即可. 问题2: 记\(z=y^{-1}\)即y在模意义下的逆元,我们就是要求\(z…
题目链接 第一问白给. 第二问: 设 \(b=y^{-1}\),且以下的 \(Ans\) 是除去 \(y^n\) 的. 设 \(C(T)\) 是固定了 \(T\) 中的边,再连 \(n-|T|-1\) 条边形成一棵树的方案数.设每个联通块的大小为 \(a_1,a_2,\ldots,a_{n-|T|}\),则答案为 \(n^{n-|T|-2}\prod a_i\). 证明可以使用 Matrix-Tree 定理. \[ \begin{aligned}Ans&=\sum_{T_2}b^{|T_1\ca…
原文链接www.cnblogs.com/zhouzhendong/p/LOJ2983.html 前言 我怎么什么都不会?贺忙指导博客才会做. 题解 我们分三个子问题考虑. 子问题0 将红蓝共有的边连接,每一个连通块的颜色相同,不同连通块独立. 答案是 \(y ^ {连通块数}\) . 子问题1 对于红树的一种连接方案,假设将在蓝树上也有的边连接起来,假设连了 \(i\) 条边,那么对答案的贡献就是: \[y ^ n / y ^ i \] 令 \[z = \frac 1 y \] 根据二项式定理…
https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是用第二类斯特林数转化一下,这样可以预处理第二类斯特林数,而sigma(C(dist(u,v),i))则利用C(n,x)=C(n-1,x)+C(n-1,x-1)来进行树DP转移得到. 设dp[u][k]=sigma(C(dist(u,v),k)),则dp[u][k]=dp[v][k]+dp[v][k-…
题意: task0,给定两棵树T1,T2,取它们公共边(两端点相同)加入一张新的图,记新图连通块个数为x,求yx. task1,给定T1,求所有T2的task0之和. task2,求所有T1的task1之和. 解:y = 1的时候特殊处理,就是总方案数. task0,显然按照题意模拟即可. task1,对某个T2,设有k条边相同,那么连通块数就是n - k.要求的就是 对于每个T2,前面yn都是一样的,所以直接去掉,最后乘上即可.关注后面这个东西怎么求.令y' = 1/y,E是公共边集. 注意到…
http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能减少一个逆序对,所以问题转换成如何求逆序对数. 归并排序或者树状数组都可搞 树状数组: 先按大小排序后分别标号,然后就变成了求1~n的序列的逆序数,每个分别查询出比他小的用i减,在把他的值插入即可 #include <cstdio> #include <cstdlib> #includ…
链接:J-Different Integers 题意:给出序列a1, a2, ..., an和区间(l1, r1), (l2, r2), ..., (lq, rq),对每个区间求集合{a1, a2, ..., ai, aj, aj + 1, ..., an}中不同的数的个数. 题解: 法一:将序列数组在后面复制一遍,就形成了一个环了.这就相当于求连续区间的不同数了. 法二:离线+树状数组 处理出每个数第一次出现的位置first.最后一次出现的位置last和所有的数的种类数tot.将区间(l, r…
链接:SPOJ - DQUERY 题意:求给定区间不同数的个数(不更新). 题解:离线+树状数组. 对所求的所有区间(l, r)根据r从小到大排序.从1-n依次遍历序列数组,在树状数组中不断更新a[i]出现的最后一个位置.更新:将a[i]所在位置i在树状数组中加1(add(i, 1)),并消去a[i]上次出现的位置上的1(add(lasta[i], -1)).当遍历到i == r时,就保存答案(sum[r] - sum[l-1]). #include<bits/stdc++.h> using…
考场 乍一看都不好做 仔细想想发现 T1 的绝对值特别好,轮流选剩余的最大/最小值就行了 T2 又要计数,直接想部分分,发现一个 sb 容斥就有 35ps(但数据锅了,只有 25pts) T3 什么玩意,发现线段树不会操作 6(线段树分裂啊,昨天刚打了板子),LCT 不会操作 2 ,但 sub3(只维护黑点) 4(线段树维护序列) 都会 T4 高消直接死了,一分都没有.两个 sub 都是链,什么情况(考场上把 \(1\) 看成 \(i\)了) 迅速写+拍完前两题 想了想 T4 的系数递推,但列出…
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字…
interlinkage: https://jzoj.net/senior/#main/show/3175 description: 给定一棵N 个节点的树,标号从1~N.每个点有一个权值.要求维护两种操作:1. C i x(0<=x<2^31) 表示将i 点权值变为x2. Q i j x(0<=x<2^31) 表示询问i 到j 的路径上有多少个值为x的节点 solution: 链剖 把颜色离散化,对每种颜色分别搞一颗线段树 直接搞会炸空间,因此要动态开点 感觉树上莫队好像也可以…
题意:每次有\(3\)中操作,对两个点连条边,删去某条边,或者问当前大小不为\(1\)的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq. 题解:水题,用map存一下pair然后分论讨论即可. 代码: int n; ll u,v; map<PLL,bool> mp; map<ll,ll> son; ll res; int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>…