摘要:
首先找到树的中心或者中心,我这里是找中心,因为我们需要找一个相同的起点,然后最多2个中心就是树的宽度为偶数时,奇数时为1个。 找到之后需要对树进行hash,使得每个点都具备独特性,使之树的形态能够保证唯一,然后利用hash值,对树的每个节点下的节点进行排序,之后如果判定这两个树是一样的话,我只需要对 阅读全文
摘要:
第一步先打一个表,就是利用轮廓线DP去打一个没有管有没有分界线组合数量的表 然后用容器原理加上枚举列当前分界线情况去递推容斥。具体如代码: 阅读全文
摘要:
首先读出题意,然后发现这是一道DP,我们可以获得递推式为 然后就知道,不行啊,时间复杂度为O(n2),然后又可以根据递推式看出这里面可以拆解成多项式乘法,但是即使用了fft,我们还需要做n次多项式乘法,时间复杂度又变成O(n2 * log n),显然不可以。然后又利用c分治思维吧问题进行拆分问题但是 阅读全文
摘要:
题意:方格n*m,然后对于每一个格子有3种画法1左对角线2右对角线3不画,求让图形稳定的画法有多少种? 思路:通过手画二分图可以发现当二分图联通时改图满足条件,然后我们对于一个dp[n][m]可以利用容器原理先得到所有情况,然后减去不满足情况,那么以一点为中心,假设该点所在的连通块为dp[i][j] 阅读全文
摘要:
最主要的步骤是用 1式子和2式子推 3式子。(难点,看了很多博客最后的时候那个式子看不懂) 阅读全文
摘要:
#include using namespace std; bool noway[20][20], Gra[20][20]; int arr[20]; int linker[20]; bool used[20]; bool dfs(int u, int vN) { for(int v = 1; v <= vN; v++) if(Gra[u][v] && !used[v... 阅读全文
摘要:
RMQ存的是区间GCD,然后遍历 i: 1->n, 然后不断地对[i, R]区间进行二分求以i为起点的相同gcd的区间范围,慢慢缩减区间。 阅读全文
摘要:
#include using namespace std; const int maxn = 1007; char str[maxn][maxn]; int cntx[maxn], cnty[maxn],x[maxn],y[maxn]; int main(void){ int T,n,m;scanf("%d",&T); while(T --){ scanf("... 阅读全文
摘要:
#include #define bit(t) (1 = 0; i --){ if(sta & bit(i)) for(int j = i - 1; j >= 0; j --){ if(sta & bit(j))continue; int tmp = sta; ... 阅读全文
摘要:
#include using namespace std; struct node{ int u, v, w, nex; bool gone; node(){} node(int a,int b,int c){ u = a;v = b;w = c;gone = false; } bool operator >mp[maxP];... 阅读全文