技巧瞎扯
先声明一下,这里基本只是告诉你有这个东西,有这么回事,并且讲的很不详细,都是一笔带过,真正想体会还是通过做题的过程的。
差分
二分答案
根号分治,分块
拆点
正难则反
找单调性
LCT 维护边删除时间的最大生成树
树的重心和直径
树的直径中点
枚举右端点,维护有几个左端点满足条件(枚举一个,维护其它)
先排序确定选取后这些元素的顺序,先将所有元素排序,再对这些元素做选取(AT3605 Zabuton)
邻项交换排序(国王游戏)
比较前面先放一些元素,然后两个位置考虑 \(a\) 和 \(b\),比较这种情况下 \(a\) 在前和 \(b\) 在前的代价,取其中更优的那个,把推出来的比较公式扔进 cmp
就行了,注意要满足严格弱序。
\(dp_i\) 表示强制第 \(i\) 个满足 xxx 条件,前 \(i\) 个的 xxx,人为添加第 \(0\) 个和第 \(n+1\) 个。
枚举的时候枚举上一个选的是哪个。
\(dp_i=\max\{dp_j+w(i,j)\}\)
\(dp_i=-\min\{-dp_j-w(i,j)\}\)
\((-dp_i)=\min\{(-dp_j)+(-w(i,j))\}\)
点对转成二维数点问题(APIO2019 路灯)
原先设计的状态中答案范围小时,把储存的答案作为 DP 状态的某一维重新设计状态
森林:联通块数 = 点数 - 边数
实际问题未必给你个森林,要看得出来
整体二分处理到 \([l,l]\) 直接把 \(l\) 加入不撤销,大区间处理的时候加区间所有数结束时撤销。(AGC002D)
补图转化(独立集\(\leftrightarrow\)团)
独立集的补集是点覆盖,匹配的补集是边覆盖。
二分图最大匹配=最小点覆盖
矩阵快速幂 bitset 优化
曼哈顿距离拆开 \(dis_{i,j}=\max((+x_i+y_i)+(-x_j-y_j),(+x_i-y_i)+(-x_j+y_j),(-x_i+y_i)+(+x_j-y_j),(-x_i-y_i)+(+x_j+y_j))\)。
一些树上点之间的路径问题可以转为考虑每条边的贡献(CF1280C)
枚举边替换最小生成树上的边(次小生成数 等)
Boruvka 算法(CF888G)
权值线段树
树上差分
状压 DP 枚举子集 T=(T-1)&S
,初始化 T=S
。
S
为全集,T
可以枚举到 S
的所有子集
开两个堆,其中一个保存要删除的数,每次取堆顶前比较两堆堆顶,一样就弹出,弹到空或不等为止。
并查集维护连续染色段(P2391)
时光倒流(删边->加边)
线段树对时间分治
长链剖分维护深度有关的信息
最大流问题一般转化为最小割问题求解。
先全部选取,割掉的部分代表不选,答案 = 总和 - 最小割。
最大权闭合子图(NOI2006最大获利,NOI2009植物大战僵尸)
\(\gcd(a_1,a_2,\cdots ,a_n)=\gcd(a_1,a_2-a_1,a_3-a_2,\cdots ,a_n-a_{n-1})\)。差分维护
树上差分
点路径:x+1 y+1 LCA-1 LCA 的父亲 -1
边路径:x+1 y+1 LCA-2
边的信息下放到点上(QTREE1)
点的信息移动到父边(根的父亲加虚点)(QTREE6)
因为每一个点只有一个父边(除了根)
矩阵快速幂维护图上任意两点间可达性/距离(P2886 [USACO07NOV] Cow Relays G)
冒泡排序交换次数 = 逆序对数
一轮交换的影响:记录第 \(i\) 个位置,它之前比它大的数的个数,每个位置的值加起来就是逆序对数。整体前移,然后所有非零数减一 \(\max(x-1,0)\) 个。(NOI Online R1 冒泡排序)
4 1 5 3 2
0 1 0 2 3
1 4 3 2 5
0 0 1 2 0 (1 0 2 3 0-> 0 0 1 2 0)
1 3 2 4 5
0 0 1 0 0
1 2 3 4 5
0 0 0 0 0
路径异或一个环是另一条路径
一类状压DP题(CF1215E)
树剖换根,并不是真的换根,查链不变,查子树时分类讨论,查询点在一开始建好的树的根和题目要求的根的链上时,取查询点不包含题目要求的根的所有子树信息即可,这其实就是两个部分信息并起来。否则照常(P3979)
树形背包,处理第 \(i\) 个子树的时候,容量第一维枚举前 \(i-1\) 个子树的大小之和这里面取几个,第二维枚举这个子树中取几个,这样复杂度是 \(O(nk)\),可以看作每一对点至多被选取了一次,是在它们的 LCA 处的(01 背包两维都要倒序)。(P3177 [HAOI2015]树上染色)
\(1\times 2\) 的覆盖问题,把棋盘黑白相间染色,覆盖的一定是相邻的一黑一白。
原文地址:https://www.cnblogs.com/IltzInstallBI/p/12793310.html
- 第六章 正则表达式的构建
- android 自定义相机
- Android学习第六弹之 Android字体大小自适应不同分辨率的方法
- 仿12306查询火车票功能
- Spring Boot开发Web应用
- C#/.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件】
- android 自定义gallerey并实现预览功能
- Android学习第五弹之Matrix的用法
- 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput
- Android新组件RecyclerView介绍,其效率更好
- android wheelview实现三级城市选择
- 算法之冒泡排序
- 数据结构之链表
- Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django在Ubuntu14.04的部署方法
- ubuntu19系统及以下版本安装android studio的教程
- CentOS7升级内核kernel5.0版本
- 详解ubuntu14.04如何设置静态IP的方法
- linux安装图形化界面的操作方法
- Apache FlinkCEP 实现超时状态监控的步骤详解
- 解决Centos7下crontab+shell脚本定期自动删除文件问题
- 详解在Ubuntu上的Apache配置SSL(https证书)的正确姿势
- 如何在 Linux 中查找一个命令或进程的执行时间
- Ubuntu 18.04 LTS中配置IP地址的完整步骤
- Linux系统下Nginx支持ipv6配置的方法
- 微信研发体系下的分布式配置系统设计概要
- Linux双网卡绑定脚本的方法示例
- Serverless 有一百种玩法,比好玩更好玩
- 如何在容器服务中获取客户端真实源IP