07 2019 档案
摘要:[摘自爱码网] 这种算法能够解决关于询问一棵树的子树的相关信息的问题。 算法的流程大概是这样: 1、dfs将一棵树建好,将节点的size、dfs序、重儿子、该dfs序对应的节点这些信息处理好(其他的信息具体问题具体分析)。 2、进入solve函数,先去解决非重儿子,然后将这些非重儿子的信息暴力清空。
阅读全文
摘要:我们概括题意,即将n个点组成一棵树的方案数. 所以是prufer. 又因为要考虑连边顺序,因此再乘上(n-1)!. 唔...难道你们都知道为什么是(n-1)!而不是n!吗... 反正我被这个地方卡了... 我认为选第一个点的方案为n,第二个为n-1,...所以应该是n!.. 但是是错的,因为对于每一
阅读全文
摘要:prufer数列,可以用来解一些关于无根树计数的问题。 prufer数列是一种无根树的编码表示,对于一棵n个节点带编号的无根树,对应唯一一串长度为n-2的prufer编码。 (1)无根树转化为prufer序列。 首先定义无根树中度数为1的节点是叶子节点。 找到编号最小的叶子并删除,序列中添加与之相连
阅读全文
摘要:vim查看颜色:ls -l /usr/share/vim/vim74/colors/ 数组指针!=指针数组,要传数组用 int *a ,a本身是个指针,加上[]解引用,删掉后我的int *实际上表示的是我传的a是一个指针,*是给int的而不是a,也可以int* a这么写 预处理log: if(!lg
阅读全文
摘要:提炼:tarjan环缩成点,建0虚根,跑树形DP,最难的是看出可能有n个点n条边然后缩点,n个点n条边可能不只有一个环 n个点n条边->基环树: 基环树,也是环套树,简单地讲就是树上在加一条边。 既然成环就必定要么全选要么全不选,直接缩成一个点即可。 我的错误: 1.第二次建图时跑的第一次的邻接表
阅读全文
摘要:提取:等式转换,桶,倍增lca 对于(x,y)的一次提问,我们规定lca为(x,y)的lca d为深度,w为点出现观察员的时间 那么对于(x,lca)这段路径上的点i,此次提问能作出贡献的等式是 d[x]-d[i]=w[i] ->d[x]=w[i]+d[i] 对于(lca,y)这段路径上的点i,此次
阅读全文
摘要:一上来这个专题就死磕了这道题一上午,然后发现 类似二分图?2h 样例都过不去 类似状压?1h 过样例了,WA 0 类似暴搜?10min AC 然而正解是欧拉回路 欧拉回路: 如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。如果一个回路是欧拉路径,则称为欧拉回路(
阅读全文
摘要:提炼:tarjan判环,dfs建树,倍增lca,预处理环两点间距离 我犯的错误: 1.基环树不只有一棵,可以有很多 2.自环不能将其忽略,(对于我的算法)应该将其特殊考虑在算法内 3.代码一定要简洁有力,不能让自己调都恶心 Code 数组含义: que[N]队列,in_que[N]tarjan判是否
阅读全文
摘要:本题需要一定的思考量。 对于位于(x,y)的一黑色,无论如何换,它的相对位置总不会发生变化,也就是不会有两个(x,y)位置的黑色 那么如果我们想让对角线上布满黑色,就可以将题目转化为 判断是否有n个满足横纵坐标互不相同的黑色 二分图匹配即可。 Code #include<cstdio> #inclu
阅读全文
摘要:没什么的,看到限制想想拓扑就行。 拓扑有两种形式(我接触的): 1.求字典序最小:建正图,找最小的进行更新,正序输出。 2.求编号最小:建反图,找最大的进行更新,倒序输出。 本题是第二种情况。 Code #include<cstdio> #include<cstring> #include<queu
阅读全文