51nod2884

水题 阿 就是先求出 最短路树 然后 从树的底端开始删点就好了#include<iostream>#include<queue>#include<utility>#include<cstring>#include<algorithm>#include<vector>#define x first#define y secondusing namespace std;const int N = 3e5 + 10,.
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod 2887 抓小偷 平面图最小割转换成最短路

首先是n^2m的复杂度的最小割 果断超时了 。。网上一搜是需要转换成最短路的#include<iostream>#include<cstring>#include<queue>#define INF 0x3f3f3f3fusing namespace std;const int N = 410 * 410,M = N * 2;int head[N],to[M],last[M],c[M],cnt;void add(int a,int b,int c1
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

E - Digit Products 实在是瞎搞

首先我是想把题目分成好几部分来做 首先是第一部分 列如88897 我们找到它的最高位 然后先把10000以下的算出来 如何去算呢 分成两部分 一部分是 没有0的 一部分是有0的 有0这一部分用dp + map就可以了因为 最多组成的乘积有 9^9 / 9! 为1000多一点 所以开map是完全没问题的 没有0的部分用容斥的思想 就是全部数减掉 每位都>=1 的情况因为我们这个是只能在整数部分 就是后面每位都可以取到9的情况 我们不妨从前往后 把每一位的小一位取出来 去求 数量 最后统计一下即可#
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

牛客多校2 G League of Legends

#include<iostream>#include<cstring>#include<algorithm>#include<map>#include<vector>using namespace std;const int N = 5e3 + 10;int n,k;struct node{ int l,r; bool operator < (const node &p)const{ .
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod2861 2-sat

列如 h1 m2则 转换成 选了m1 必须选 m2即可#include<bits/stdc++.h>#define INF 0x3f3f3f3f3f3f3f3fusing namespace std;const int N = 2010,M = 2010;typedef long long ll;typedef pair<int,int> PII;typedef unsigned long long ull;char a,b;int head[N],to[M]
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod 2877熟练使用tarjan的知识

我一开始想到tarjan 没想到咋做 看了题解直呼妙阿考虑一个点有多个子块 若子块中的点不能回到父节点 那么这个子块 就和 其他子块是不能互相到达的这时候只需要记录 已经遍历的多少子块即可 这样不会重复#include<bits/stdc++.h>#define INF 0x3f3f3f3f3f3f3f3fusing namespace std;const int N = 1e6 + 10,M = 5e5 + 10;typedef long long ll;typedef .
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

Codeforces Round #738 (Div. 2) E

首先可以想到 题目如果通过正面来求的话 那么所需要求的种类很复杂 所以很容易想到容斥的思想 我们就可以想到 将所有组建情况再减去 gcd不是 1 的情况即可1.组建所有情况 就可以考虑 dp 前 i个数 组成 m 的种类有多少 很明显 是个背包 但是 复杂度为 nm * (ri - li)所以超时 考虑优化 因为 ri ~ li是连续的 所以可以使用前缀和优化至 2nm2.gcd不是1的情况 那么就可以变成 gcd 为2 为 3.。。。。为 m的情况 考虑2的时候 我们可以把所有2的倍数往上放 3的时候
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod2614 小B爱旅行 (参考范艺杰代码 基本抄袭 太难了)

由题意可知 图是由 环 和 直链组成的 若 环能到达 那么 能到达的直链 都能和环组成 一组数 因为 每个到达环的路径再回来 把到环上的直链抵消了所以我们 可以考虑 把环上的值全都扔进线性基 再看直链上有哪些值是能和环组成新值的如果 线性基里能组成的 那么链上的就无需加入 若不能组成的 那么 一定会有一位 是线性基里所没有的那么答案就是 (1<<sz) * s.size() s表示线性基组成不了的数的个数 sz表示线性基里的元素个数2.删边我们可以考虑离线从后往前加边 若加的边多环 那么.
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod 1830

所以只需要用线段树合并一下就好了#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#define x first#define y secondusing namespace std;const int N = 5e5 + 10,M = N * 2;typedef long long ll;typedef pair<int,int>..
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod1798 打怪兽

设f[i] 为至少击败 i个怪兽的方案数 那么击败i个的方案数则为 f[i] - f[i + 1]答案即为 1~n f[i]的求和设sum[i]为前 i个怪兽的攻击力因为能量从1 ~ n分别为 0~n - 1那么 1 ~ i + 1都是可以被选择为前 i 个的 所以每次就是 乘2如果sum[i] >= m的话那么就是 2^i * fac[n - i]如果sum[i] < m的话 就要从前面选择一个 去减掉 因为每次都乘 fac[n - i]所以和只需要看 i 只需要存一个优先队列 .
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod 1706 最短路 + 思维

首先考虑到 会有边重合, 我们思考 如果有边重合 那一定会出现一个起始点 起始点 就是 重合的那个点 那么只需要 将到达点设为 三点的终点 就没有边重合了 51nod的数据较大 需要用deque 优化 bfs#include<iostream>#include<queue>#include<cstring>#define x first#define y secondusing namespace std;typedef long long ll;.
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

洛谷P4197 Peaks 线段树合并

考虑离线 然后 从权值小的开始建边 进行线段树合并#include<iostream>#include<algorithm>using namespace std;const int N = (5e5 + 10) * 4;typedef pair<int,int> PII;int h[N];int n,m,q,fa[N];struct node{ int x,y,w,type,id; bool operator < (con.
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

牛客练习赛88 D 克鲁斯卡尔重构树

首先题目要求我们找的是 最小生成树上路径的最大值 倘若我们用普通的树上 lca去寻找的话 是需要logn级别去查询的 但是询问有1e7 所以我们考虑别的方法 思考到克鲁斯卡尔重构树 边权值小的在最下面 边权值大的在最上面 所以我们 可以使用lca o1查询 直接查询到 最大边权#include<iostream>#include<cstring>#include<cmath>#include<algorithm>#define x first#..
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

51nod1656 合并trie树

给每个子树存一个 size 因为 我们只需要每个字符出现一次 所以如果x 或者 y一个没有的话才能返回 不然的话 就会重复#include<iostream>#include<cstring>#define x first#define y secondusing namespace std;const int N = (3e5 + 10) * 2,M = N * 2;typedef pair<int,int> PII;typedef long lo
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

数论专题1

112
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

图论的知识

图论之二分图(1) 二分图的最小路径覆盖1.最小不相交路径覆盖 :Res == 节点数-最大匹配数2.最小可相交路径覆盖:首先floyd算法跑出所有可以到达的点,之后Res==节点数-最大匹配数(2)二分图的最小顶点覆盖:定义:若选择一个点说明选择与它相连的所有边,最小顶点覆盖就是选择最少的点来覆盖所有的边。最小定点覆盖==二分图最大匹配(3)二分图最大独立集定义:选出一些顶点使得这些顶点两两不相邻,则这些点构成的集合称为独立集。最大独立集为包含顶点数最多的独立集。定理:最大独立集 =.
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

一些有用的状态转移

1.二进制 子集的最大值for(int i = 0; i < 24; i++){ for(int j = 0; j < (1 << 24); j++{ if((j >> i) & 1){ dp[j] = max(dp[j],dp[j ^ (1 << i)]; } }}
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

关于数据结构一些自己的理解与总结与题目

关于并查集:一定是他的集合与集合里面的最顶层的父亲的关系若是权值并查集 一定是父亲的值相加减 因为成员的值不一定准确acwing 239题目大意 给你一个n 假设有一个01序列给你一个m 给你m个条件 问你第几次条件的时候是矛盾的string am的 格式是 给你一个 l r 和 aa为even 表示 l~r 里面有偶数个1思路有两种 1.用前缀和的想法 若 l ~ r为偶数 那么前缀 l - 1 与 前缀 r 的 1的个数相同 若l ~ r为奇数 则不同2.存一个集合 fa[i]
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

自己没有完成的优秀的题目

线性基牛客北京理工 Xortest Path
分类: 编程语言 发布时间: 08-15 05:50 阅读次数: 0

直播预告 | 如何从 0 到 1 打造敏捷团队?

作为管理者,你有没有遇到以下问题:VUCA 时代,市场变化很快,产品如何快速迭代,满足市场需求?市场端与产品侧工作目标和任务不明确,导致各自为战、项目进度缓慢?客户需求比较多,产品与研发、运维同时跟进多个项目,导致交付压力巨大?不急,,将联合(云时代的系统可观测平台)、(著名智能化研发管理工具),举办《观见话题》互动直播活动,共同探讨**《如何炼成高效敏捷团队?》**,建立不同团队之间信任感,提高整体绩效与产出,促进客户协作与交付效果。...
分类: 编程语言 发布时间: 08-15 05:49 阅读次数: 0