摘要:
洛谷P3375 不好说,感性理解就行,上代码: #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int n, m, nx[N]; string s, t; int main() { cin >> s >> t, 阅读全文
摘要:
整体二分:当看到满足以下三个条件的问题:1.答案可以二分 2.多组询问 3.答案可以分批计算贡献(可加性),可以考虑用整体二分来做。 我们先来看看如果单独二分会怎么样。二分的一般是操作数、排名之类的,到了一层二分,就把 到 的贡献计算一遍。之后如果贡献少了,就到 右边 阅读全文
摘要:
struct node { int a[25]; node(){memset(a, 0, sizeof a); a[0] = 1;} node(int x) { a[0] = 0; if(!x) a[++a[0]] = 0; else while(x) a[++a[0]] = (x % 10), x 阅读全文
摘要:
例题:洛谷P4178 Tree 题意:求树上 的路径条数 点分治: 1·分治 从整棵树开始,不断分下去,每次统计过当前根节点的答案。 inline void dfs(int u, int SZ) { vis[u] = true; //记录vis ans += getans(u, 阅读全文
摘要:
一、树的重心的定义: 在一棵树中,如果我们选择某个结点为根,可以使得它的所有子树中最大的子树最小,那么这个结点就被称作这棵树的重心。 二、树重心的性质: 1.以重心为树根时,所有子树的大小不超过全树大小的一半。 2.如果树的所有边权都为1,那么树中所有点到某个点的距离和中,到重心的距离和是最小的;如 阅读全文
摘要:
遍历: inline void dfs(int u) { sz[u] = 1; dep[u] = dep[fa[u]] + 1; int v; for(int e = hd[u]; e; e = nt[e]) { dfs(v = to[e]); sz[u] += sz[v]; if(sz[v] > 阅读全文
摘要:
一、树的直径的定义:最长的一条链。 二、求法 1.两次bfs(或者dfs)求树的直径 优点:可以求出路径。 缺点:时间复杂度O(2*N), 在负权边中无法使用。 方法:先从任意一点出发,找离它最远的点P,再从点P出发,找离它最远的点Q,P到Q的距离就是树的直径。 代码: inline void df 阅读全文
摘要:
inline void dfs(int u, int f) { fa[u][0] = f; dep[u] = dep[f] + 1; for(int i = 1; i <= 26; ++i) fa[u][i] = fa[fa[u][i - 1]][i - 1]; int v; for(int e = 阅读全文