虚树
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
LOJ#2496. 「AHOI / HNOI2018」毒瘤【树加额外边求独立集方案数(枚举状态,虚树优化转移)】
题目描述:如题,给出一棵树以及额外的k≤11k\le 11k≤11条边,求选出一个独立集的方案数。n≤100000n\le100000n≤100000题目分析:如果k=0k=0k=0,那么直接设f[u][0/1]f[u][0/1]f[u][0/1]表示uuu选或不选DP。现在k>0k>0k>0,直接DP得出的方案可能有些不满足限制。但是kkk很小,k≤11k\le11k≤11条边连接着≤22\le22≤22个特殊点。如果暴力枚举这222222个特殊点的选法(强制其选或不选),再进原创 2020-06-05 19:13:24 · 289 阅读 · 0 评论 -
Codeforces809E - Surprise me!【欧拉函数变换 + 莫比乌斯反演 + 虚树】
题目描述:见洛谷n≤2∗105n\le2*10^5n≤2∗105题目分析:首先考虑怎么解决 φ(i∗j)\varphi(i*j)φ(i∗j)。我们希望的自然是把它变成 φ(i)∗φ(j)\varphi(i)*\varphi(j)φ(i)∗φ(j) 方便独立计算,那么观察这两个形式的差别:φ(i)∗φ(j)=i∗j∗∏p∣i(1−1p)∏p∣j(1−1p)φ(i∗j)=i∗j∗∏p∣ij(1−1p)\begin{aligned}\varphi(i)*\varphi(j)&=i*j*\pr原创 2020-05-29 17:11:12 · 142 阅读 · 0 评论 -
Codechef Union on Tree【点分树+虚树】
题目描述:nnn个点的树,mmm次询问,每次给出kkk个点(a[i],r[i])(a[i],r[i])(a[i],r[i]),表示点a[i]a[i]a[i]可以保护与它距离不超过r[i]r[i]r[i]的点,输出kkk个点总共可以保护的点数。n,m≤50000,∑k≤500000n,m\le50000,\sum k\le500000n,m≤50000,∑k≤500000题目分析:建虚树,然后更新每个点可以保护的最长距离r[i]r[i]r[i](上下两遍更新)。然后累加每个点在树中与它距离不超过r[原创 2020-05-16 16:54:42 · 180 阅读 · 0 评论 -
20200417【网格路径异或最大值,树上x到一段编号区间的最短距离,多个区间的不同权值种数】
T1:签到因为题解说的实在太好了所以就直接粘贴了。在取奇/偶数个数使得异或和最大,给所有权值加上一个2N2^N2N后加入线性基,如果需要取奇数个数就带入0,取偶数个数就带入2N2^N2N到线性基中查询最大异或和就可以了。T2:树一段连续的编号不好用数据结构维护距离,但是用一次dfs/bfs可以很方便地求出每个点到一段连续编号的最近距离。O((n+m)log2)O((n+m...原创 2020-04-18 11:38:17 · 265 阅读 · 0 评论 -
[HNOI2014]世界树【虚树,重链剖分求k级祖先(指针)】
题目描述:题目分析:算中点的时候注意一下中间点的划分。不要漏了非虚树边的贡献。Code:#include<bits/stdc++.h>#define maxn 300005using namespace std;int n,m,k,a[maxn],b[maxn],ans[maxn],dep[maxn],fa[maxn],siz[maxn],son[maxn],to...原创 2020-01-06 17:18:15 · 168 阅读 · 0 评论 -
hihocoder #1387 : A Research on "The Hundred Family Surnames"【虚树】
题目描述:大小为n的树上每个节点上有一个姓氏(字符串,可能相同),m个询问,每次询问某两个姓氏在树上的最远距离。n,m<=100000题目分析:最远距离只能在直径的端点之间取得,建出每个姓氏的虚树求直径两端点即可。因为要输入string用了cin和ios::sync_with_stdio(false);然后作死加了一个puts("-1")。于是狂WA不止。。中途数组各处没有清零MLE...原创 2020-01-06 14:56:53 · 139 阅读 · 0 评论 -
Codeforces613D Kingdom and its Cities【虚树】
注意判断-1后虚树的清零。Code:#include<bits/stdc++.h>#define maxn 100005using namespace std;int n,m,k,a[maxn],dep[maxn],fa[maxn],siz[maxn],son[maxn],top[maxn],dfn[maxn],tim;int fir[maxn],nxt[maxn<...原创 2020-01-05 21:22:33 · 131 阅读 · 0 评论 -
BZOJ3611: [Heoi2014]大工程【虚树】
题目描述:国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。我们这个国家位置非常特殊,可以看成是一个边权为1的树,城市位于顶点上。在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的路径长度。现在国家有很多个计划,每个计划都是这样,我们选中了 k 个点,然后在它们两两之间 新建 C(k,2)条 新通道。现在对于每个计划,我们想知道:1.这些新通道的代价和2....原创 2020-01-04 08:24:11 · 110 阅读 · 0 评论 -
BZOJ2286: [Sdoi2011]消耗战【虚树】
题目描述:题目分析:虚树除了询问点总数限制,更本质的特征是可以将询问点之间的信息通过dfs预处理出来,从而可以“缩链”。Code:#include<bits/stdc++.h>#define maxn 500005#define LL long longusing namespace std;int n,m,k,a[maxn],dep[maxn],fa[maxn...原创 2020-01-01 21:44:13 · 88 阅读 · 0 评论