摘要:
题目 求一个网格图权值和最大的哈密顿回路。 分析 其实和模板题没有太大变化,就是记得要加上贡献和添加时是个比较大小而不是个数求和。 代码 #include<bits/stdc++.h> using namespace std; template <typename T> inline void re 阅读全文
摘要:
题目 高精度加减乘除模。 分析 高精度模板,这里还是压位高精。 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #ifndef _INTEGER_HPP_ #define _INTEGER_HPP_ names 阅读全文
摘要:
题目 求网格图哈密顿回路个数,和模板提相差不大。 分析 和模板提的差别只在 \(int128\) 和乘以2以及特判。 代码 #include<bits/stdc++.h> using namespace std; template <typename T> inline void read(T &x 阅读全文
摘要:
题目 求一个网格图的哈密顿回路个数。 分析 插头dp模板题。 学插头dp时的博客:浅谈插头dp 插头dp有两种判断连通性的办法,第一个是最小表示法,第二个是括号序。 这里使用后者。 同时,插头dp的状态是有重复的,并且还有很多非法的,这里我们通过哈希使得只存储了合法状态,这样会让插头dp变得很快,但 阅读全文
摘要:
题目 分析 显然如果我们某个时候把这个多余的叶子指定为根的话,那么其子节点的树哈希值就应该等于原树某个点的哈希值。 于是可以考虑直接换根dp,第一个树直接把每一个节点的值都扔进一个哈希表,第二个树的时候可以对于每一个节点作为根的时候,消去自己的贡献然后判断是否存在这个消去后的数即可。 代码 #inc 阅读全文
摘要:
题意 分析 可能是思维题? 首先我们发现取最小值的操作就尽可能填小的数。 如果考虑通过“代价”来求得最大值: 那么其实对于一个取最小值的节点,我们如果定义其代价,很容易发现就是“所有子节点的代价之和”,而最大值呢,就是“所有子节点代价的最小值”。 我们要让这个代价越小越好,而取最小值显然会让我们不得 阅读全文
摘要:
题意 判断树同构。 分析 直接树哈希即可。 代码 #include<bits/stdc++.h> using namespace std; template <typename T> inline void read(T &x){ x=0;char ch=getchar();bool f=false 阅读全文
摘要:
题目 分析 树哈希模板题。 这里介绍一种不容易被卡的树哈希。 判断树同构有两种办法,一种是最小表示法,一种就是树哈希。 树哈希有很多办法,但是大多很容易被卡掉,这里介绍一种。 同样的,树哈希是可以换根dp的,也就是说可以求出每一个点作为根的答案。 如果我们需要快速判断,那么我们可以考虑重心来判断,最 阅读全文
摘要:
题意 略。 分析 $prufer$序列+\(dp\)。 代码 #include<bits/stdc++.h> using namespace std; template <typename T> inline void read(T &x){ x=0;char ch=getchar();bool f 阅读全文
摘要:
题意 $prufer$序列和树的互相转化。 分析 模板题,要背一遍。 一些性质: 代码 #include<bits/stdc++.h> using namespace std; template <typename T> inline void read(T &x){ x=0;char ch=get 阅读全文
摘要:
题意 略。 分析 容易列出 \(dp\) 方程,然后因为我们子节点是由祖先节点转移,所以这样的情况我们可以考虑出栈序。 出栈序的性质就是对于一个节点来说,其祖先节点的出栈序都在这个节点的后面,于是我们可以考虑dfs序更新,那么所有这个点后面的数都只有它的祖宗才有值,于是就是维护后缀了。 这里维护区间 阅读全文