SD 一轮集训 day3 染色(color)】的更多相关文章

蜜汁打表题.. (首先L=1和L=N的情况过于傻逼(而且是特殊情况),可以先写出来,然后剩下的L的做法在下面) 首先你要写一个打表程序,找出{1,2,....,n} 乘若干个 循环唯一的轮换可以搞出的所有排列,然后统计一下对于每个i,总环数=i 的排列的个数 cnt[i]. 如果你规律找的好的话,是可以发现如下结论的: 1.当L是偶数的时候,cnt[i] = s(N,i) ,其中s(,)是第一类斯特林数. 2.当L是奇数的时候,cnt[i] = s(N,i) or 0,cnt[i]不为0当且仅当…
[LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} x_k&=b\times c^{4k}+d\times c^{2k}+e\\ f(x)&=\sum_{i=0}^{n-1}a_ix^i \end{align} \] 求 \(f(x_0),f(x_1),\ldots,f(x_{n-1})\). 对 \({10}^6+3\) 取模. 题解 直接多…
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么二分一个答案\(d\),把所有点挂到\(d+1\)次祖先上去,那么\(d+1\)次祖先的哈希值就是它原本的括号序列挖去了若干段,直接暴力哈希拼接起来就好了. #include<iostream> #include<cstdio> #include<cstdlib> #inc…
LOJ 被一件不愉快的小事浪费了一个小时= =. 表示自己(OI方面的)智商没救了=-= 比较显然 二分+树哈希.考虑对树的括号序列进行哈希. 那么每个点的\(k\)子树的括号序列,就是一段区间去掉距离它为\(k+1\)的点的子树的区间.那么我们把每个点放到它的\(k+1\)级祖先上,在\(k+1\)级祖先处求哈希值时,跳过这个点的括号区间即可. 至于具体的哈希方式...xjb哈希就行了 //672ms 24.97M #include <cstdio> #include <cctype&…
题意 题目链接 分析 首先二分,假设二分的答案为 \(mid\),然后考虑利用括号序列来表示树的形态. 点 \(u\) 的 \(k-\) 子树的括号序列表示实际上是刨去了 \(u\) 子树内若干个与 \(u\) 距离为 \(mid\) 的点的一段连续的括号序列,挂链即可.判断括号序列是否相同可以考虑哈希. 总时间复杂度 \(O(nlog^2n)\). 代码链接…
传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash\) 这样在 \(k+1\) 级祖先上暴力删除就好了 # include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn(2e5 +…
非常强的构造题. 很显然的是我们要构造一个类似菊花图的东西,因为这样的话两点之间路径的点数会非常少,很容易满足第二个条件. 但是因为直接菊花图的话会不满足第一个条件,,,所以我们可以构造一个类菊花图. (题解太神了,%一发题解) #include<cstdio> #define ll long long using namespace std; int main(){ int k; scanf("%d",&k); printf("%d\n",k&…
可以发现把每一个 a[i] * b[i] 加到矩阵里去,就相当于 把一个 1*m 的向量伸缩后变成 n个再加到矩阵里去,所以答案就是远=原矩阵中线性线性无关组的个数. (而且好像一个矩阵横着消元和竖着消元 ,得到的线性无关组个数是一样的啊) #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define ll long long using namespace…
神TM有是结论题,我讨厌结论题mmp. 杨氏矩阵了解一下(建议去维基百科). 反正就是推柿子,使劲推,最后写起来有一点小麻烦,但是在草稿纸(然鹅我木有啊)上思路清晰的话还是没问题的. #include<cstdio> #include<cctype> #include<algorithm> #define ll long long using namespace std; const int maxn=2000000,ha=1e9+7; inline int read(…
可以发现每条边只能选一次或者两次,并且最后每个点的度数(∑邻接边选的次数和)都是偶数(代表有欧拉回路). 然后根据题意列一个 n 行 m+1 列的01矩阵,每一行代表一个异或方程组(每个点的度数是偶数),每一列(除了最后一列)代表一个变量(每条边是不是选2次),最后一列0/1代表这个点目前的度数是偶数还是奇数. 最后我们要求的就是方程所有解中逆字典序最小的解. 乍一看肯定是毫无思路,但是做了 [HAOI2018] 反色游戏 之后,就感觉这两个东西还是有点点共性的. 我们高斯消元的过程肯定是 i…