[xsy2123]毛毛虫】的更多相关文章

题意:有一棵带点权的树,链修改是把$(x,y)$这条链和与其相邻的节点都加上一个数,查询是问$(x,y)$这条链和与其相邻的节点的权值和 学到了一个新姿势? 考虑树链剖分,在剖重链时每次给当前节点的儿子顺次标号,那么一条重链上所有节点的儿子的标号是连续的,也就对应着题目的限制,再补上漏掉的$lca_{x,y}$和$fa_{lca_{x,y}}$即可 #include<stdio.h> typedef long long ll; void swap(int&a,int&b){a^…
感觉相比其他树归题简单多了,不过有点绕(也许是我的思路很奇怪一.一)(这是省选题啊,就算作为T1这题也太水了,HA好弱……) 原题: 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图1)抽出一部分就变成了右边的一个毛毛虫了(图2). N≤300000 先搞出有根树,这回不枚举中间点了,说说我的奇怪的做法一.一 搞两个数组,一个是uf,表示包括自己在内的直系最大值,另一个是bf,表示x和x往下的兄弟中uf最大的一个 然后就是求…
这道题细节处理不少,但要AC不难: 设以i节点为根节点的子树能形成的最大的毛毛虫长度为f[i],则f[i]=max(f[j])+i节点的孩子数: 答案需要f最大和次大的两个子树合并,而且若合并的位置不是根节点,ans++: 我就是坑在了最后一点上,最后打表找到了问题: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; int n,m,f[maxn],child[max…
题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入输出格式 输入格式: 在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数. 接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N ).你可以假定没有一对相同的 (a, b) 会出现一次以上. 输出格式: 在文本文件 worm.o…
题面 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入格式: 在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数. 接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N ).你可以假定没有一对相同的 (a, b) 会出现一次以上. 输出格式: 在文本文件 worm.out 中…
Description 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大. Input 在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数. 接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N ).你可以假定没有一对相同的 (a, b) 会出现一次以上. Output 在文本文件 worm.out 中写入一个整数 , 表示最大的毛毛虫的大小. Sample Input…
题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入输出格式 输入格式: 在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数. 接下来 M 行,每行两个整数 a, b 表示点 a 和点 b 有边连接( a, b ≤ N ).你可以假定没有一对相同的 (a, b) 会出现一次以上. 输出格式: 在文本文件 worm.o…
$ \color{#0066ff}{ 题目描述 }$ hsezoi 巨佬 olinr 喜欢 van 毛毛虫,他定义毛毛虫是一棵树,满足树上存在一条树链,使得树上所有点到这条树链的距离最多为 1. 给定 n .现在请你求出 n 个点.有标号的毛毛虫的数量.答案对 998244353 取模. \(\color{#0066ff}{输入格式}\) 输入只有一行一个整数 n . \(\color{#0066ff}{输出格式}\) 输出一行,表示答案. \(\color{#0066ff}{输入样例}\) 5…
link 巨佬olinr的题解 <-- olinr很强 考虑生成函数 考虑直径上点数>=4的毛毛虫的直径,考虑直径中间那些节点以及他上面挂的那些点的EGF \(A(x)=\sum_{i\ge 1}\frac{ix^i}{i!}\) 考虑和直径两端点相连的节点,我们强制让他挂至少一个点(否则他就成了直径端点就重复了),EGF \(B(x)=\sum_{i\ge 2}\frac{ix^i}{i!}\) 最后答案生成函数就是 \(Ans(x)=B(x)*\frac{1}{1-A(x)}*B(x)\)…
题目大意:给一棵树,求其中最大的“毛毛虫”,毛毛虫的定义是一条链上分出几条边 题解:把每个点的权值定义为它的度数减一,跑带权直径即可,最后答案加二 卡点:无 C++ Code: #include <cstdio> #include <cctype> namespace __IO { namespace R { int x, ch; inline int read() { ch = getchar(); while (isspace(ch)) ch = getchar(); for…