网络流

拆点/拆边技巧

题目来源

bzoj1070

题目描述

同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心。维修中心共有\(M\)位技术人员,不同的技术人员对不同

的车进行维修所用的时间是不同的。现在需要安排这\(M\)位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。

说明:

1.顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。

2.可以支持不同的技术人员同时修车。也就是说,可以理解成\(N\)位车主在\(M\)位技术人员那里排好队,然后\(M\)位技术人员同时完成他们的任务。

约束条件

\(2 \leq M \leq 9,1 \leq N \leq 60,1 \leq T \leq 1000\)

时间限制:1s

空间限制:512MB

最小割模型的转换

题目来源

(bzoj1934)

题目描述

幼儿园里有\(n\)个小朋友打算通过投票来决定睡不睡午觉。对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神。虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票。我们定义一次投票的冲突数为\(m\)对好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数。 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小?

约束条件

\(2 \leq n \leq 300,1 \leq m \leq n(n-1)/2\)

高级专题

题目来源

(bzoj3502)

题目描述

给定一个长为\(n\)的数列,要求选出最多\(k\)个不相交的区间(可以不选),使得选中的数字之和最大。

约束条件

\(1 \leq k \leq n \leq 1000000\)

时间限制:3s

空间限制:512MB

注:其实这里还有一些技巧没有用题目覆盖到:

1.最小割的构造

2.最大权闭合子图,最大密度子图的做法

3.上下界网络流

4.哪些边必定在最小割/可能在最小割/一定不在最小割里面(bzoj1797)

5.二分图相关的各种问题

5.1 二分图的最大独立集 = 点数 - 最大匹配

二分图最大独立集的构造也要会!

5.2 二分图的最小边覆盖集 = 最大匹配

5.3 二分图博弈问题 *

5.4 \(k\)正则的二分图必定有边的\(k\)染色,以及它们的构造方法

一个方法是每次找完美匹配删掉即可。

(https://atcoder.jp/contests/agc037/tasks/agc037_d)

5.5 一些涉及到网格图的题目,需要用它是二分图的性质来建模 *

5.5 二分图删点/删边匹配问题(https://loj.ac/problem/2276))

6.模拟费用流*

7.线性规划转网络流(bzoj1061) *

树上问题归纳

树形DP

题目来源

https://loj.ac/problem/2546

题目描述

外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻。

在黄金舰队就位之前,JYY 打算事先了解外星人的进攻计划。现在,携带了监听设备的特工已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。

外星人的母舰可以看成是一棵 \(n\)个节点,\(n - 1\) 条边的无向树,树上的节点用 编号。JYY 的特工已经装备了隐形模块,可以在外星人母舰中不受限制地活动,可以神不知鬼不觉地在节点上安装监听设备。

如果在节点 上安装监听设备,则 JYY 能够监听与 直接相邻所有的节点的通信。换言之,如果在节点 安装监听设备,则对于树中每一条边 ,节点 都会被监听。特别注意放置在节点 的监听设备并不监听 本身的通信,这是 JYY 特别为了防止外星人察觉部署的战术。

JYY 的特工一共携带了 个监听设备,现在 JYY 想知道,有多少种不同的放置监听设备的方法,能够使得母舰上所有节点的通信都被监听?为了避免浪费,每个节点至多只能安装一个监听设备,且监听设备必须被用完

约束条件

\(1 \leq n \leq 10^5, 1 \leq k \leq \min(n, 100)\)

树形DP的本质是合并两棵子树的信息

树形DP除了设子树点数这个状态,还经常补充该点的状态,它父亲的状态,子树内选的点数等信息

优化树形DP就是以尽量好的复杂度做两棵子树的合并

树链剖分/dfs序

题目来源

https://loj.ac/problem/2130

题目描述

Linux 用户和 OSX 用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu 使用的 apt-get,Fedora/CentOS 使用的 yum,以及 OSX 下可用的 Homebrew 都是优秀的软件包管理器。

你决定设计你自己的软件包管理器。不可避免地,你要解决软件包之间的依赖问题。如果软件包\(B\) 依赖软件包 \(A\),那么安装软件包 \(B\)以前,必须先安装软件包\(A\) 。同时,如果想要卸载软件包\(B\) ,则必须卸载软件包\(A\) 。现在你已经获得了所有的软件包之间的依赖关系。而且,由于你之前的工作,除 \(0\)号软件包以外,在你的管理器当中的软件包都会依赖一个且仅一个软件包,而 \(0\)号软件包不依赖任何一个软件包。依赖关系不存在环(若有 \(m\)个软件包,其中 \(A_1\)依赖\(A_2\) , \(A_2\)依赖\(A_3\) , \(A_3\)依赖\(A_4\) ,……, \(A_{m - 1}\)依赖\(A_m\) ,而 \(A_m\)依赖\(A_1\) ,则称这 \(m\)个软件包的依赖关系构成环),当然也不会有一个软件包依赖自己。

现在你要为你的软件包管理器写一个依赖解决程序。根据反馈,用户希望在安装和卸载某个软件包时,快速地知道这个操作实际上会改变多少个软件包的安装状态(即安装操作会安装多少个未安装的软件包,或卸载操作会卸载多少个已安装的软件包),你的任务就是实现这个部分。注意,安装一个已安装的软件包,或卸载一个未安装的软件包,都不会改变任何软件包的安装状态,即在此情况下,改变安装状态的软件包数为 \(0\)。

输入文件的第 行包含 \(1\)个正整数\(n\) ,表示软件包的总数。软件包从\(0\) 开始编号。

随后一行包含\(n - 1\) 个整数,相邻整数之间用单个空格隔开,分别表示 \(1, 2, …, n - 1\)号软件包依赖的软件包的编号。

接下来一行包含一个正整数 ,表示询问的总数。

之后 行,每行一个询问。询问分为两种:

install x:表示安装软件包

uninstall x:表示卸载软件包

你需要维护每个软件包的安装状态,一开始所有的软件包都处于未安装状态。对于每个操作,你需要输出这步操作会改变多少个软件包的安装状态,随后应用这个操作(即改变你维护的安装状态)。

约束条件

\(1 \leq n, q \leq 100000\)

树链剖分,dfs序的本质都是把树上问题转换为区间问题!对于静态的问题,重链先行dfs序是较为通用的

别的例题: https://www.luogu.com.cn/problem/P2486

注:这里也还有一些技巧没有用题目覆盖到:

1.树上贪心问题 (https://loj.ac/problem/3052)

2.点分治/链分治的应用

2.1 做树链统计的问题,例如统计有多少条长度 \(\leq x\) 的路径 (bzoj1468)

2.2 动态dp问题 *

3.树上启发式合并/线段树合并问题

3.1 也用来做树链统计的问题,可以与点分治联系起来

3.2 用来做数据结构题 (bzoj2733,ONTAK 2010 Peaks)

3.3 用来优化树形dp * (https://loj.ac/problem/2568)

4.图论与树的结合

4.1 最小生成树/最小瓶颈路 (https://loj.ac/problem/2610)

4.2 动态加边维护最小生成树 (https://loj.ac/problem/2245,)

4.3 点双树,边双树 (https://loj.ac/problem/2587)

4.4 dfs树及其应用 (之前zbw和我在题目中都涉及到了一点)

5.动态树问题 (https://www.luogu.com.cn/problem/P3203)

6.2018到2019考过3次的树上最优化问题(有时涉及到多棵树的处理)*

(https://loj.ac/problem/2339)

(https://loj.ac/problem/2553)

(https://loj.ac/problem/2722)

7.树的计数问题 *

(https://loj.ac/problem/2665)

(https://loj.ac/problem/2983)

考试技巧

(先咕着,有空再更)

OI知识点/得分技巧的归纳总结的更多相关文章

  1. OI知识点|NOIP考点|省选考点|教程与学习笔记合集

    点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分 ...

  2. 对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结

    基本对比 使用方式 使用场合 优缺点 是否需要安装 需要的dll网址 引用方式 程序内引用 程序初期确定使用MySql,前期添加引用 大多数情况下使用在类文件内,多数使用于aspx,ashx等带有后置 ...

  3. OI中卡常数技巧

    一.I/O优化 读入优化是卡常数最重要的一条! inline int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} ...

  4. js处理url的技巧和归纳

    var url = 'http://www.deikang.com/index.php?tel=15811296111&status=1&id=100'; var n = url.in ...

  5. OI知识点

  6. Excel知识点与技巧1

    1.工作区:方便两个工作表之间进行对比 2.工作表标签颜色 3.交换两列的次序 4.快速到达边界:即快速到达第一行或最后一行 5.冻结窗格:可以固定某几行或某几列一直存在于窗口,不会随着往下拉或往右拉 ...

  7. Linux基础优化与安全归纳总结

    一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性.本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事.同行高手咨询, ...

  8. java字符串拼接技巧(StringBuilder使用技巧)

    在平时的开发中,我们可能会遇到需要拼接如下格式的字符串(至少我是遇到了很多次): 1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1 ...

  9. 超实用,Linux中查看文本的小技巧

    日常开发中,我们经常需要在服务器上进行各种文本,日志的查看操作,本文主要对常用的文本,日志查看技巧进行了一番总结和归纳,方便大家收藏起来后续查看使用: tail命令查看日志信息 实时监控日志: tai ...

随机推荐

  1. Maximum Subarray(最大连续子串)

    1 class Solution { 2 public: 3 //动态规划,维护两个变量 local[i+1]=max(array[i],local[i]+array[i+1]) 4 int Find ...

  2. Markdown语法+Typora快捷键

    1. Markdown语法 1.1 代码块生成 // 对于代码块,使用"```+编程语言"即可生成书写对应代码块的区域 // JS代码块 ​```javascript // Jav ...

  3. python3中的os.path模块

    os.path模块主要用于获取文件的属性,这里对该模块中一些常用的函数做些记录. os.abspath(path):获取文件的绝对路径.这里path指的是路径,例如我这里输入"data.cs ...

  4. 用rsync备份一台linux服务器上的数据

    rsync是安装完linux后都会自带的,在机器上运行rsync命令看是否有安装即可 备份到远程服务器 这里介绍的rsync的用途是备份一台linux服务器上的数据到另外一台机器 环境 将需要备份机器 ...

  5. Python_字符串_方法

    #字典#把字符串中的字母提取出来改为大写并计数 a="aAsmr3idd4bgs7Dlsf9eAF" b1=[x for x in a if x.isalpha()] b=''.j ...

  6. [LeetCode题解]143. 重排链表 | 快慢指针 + 反转

    解题思路 找到右边链表,再反转右边链表,然后按左.右逐一合并 代码 /** * Definition for singly-linked list. * public class ListNode { ...

  7. 设置Centos7中vim与vi编辑器显示行号

    设置Centos7中vim与vi编辑器的行号 步骤一: 输入命令设置: 1.vim ~/.vimrc 或者:(vi ~/.vimrc) 步骤二: 输入命令保存: 1.在其中输入 "set n ...

  8. Vue3.0 响应式数据原理:ES6 Proxy

    Vue3.0 开始用 Proxy 代替 Object.defineProperty了,这篇文章结合实例教你如何使用Proxy 本篇文章同时收录[前端知识点]中,链接直达 阅读本文您将收获 JavaSc ...

  9. guitar pro系列教程(三):Guitar Pro7乐谱页面显示模式设置

    大家好,又到了guitar pro系列教程的时间 本章节我们采用图文结合的方式为大家讲解一下guitar pro 7乐谱的页面显示设置,有兴趣的小伙伴都可以进来看看哦.首让我们先看下图: 如上图所示, ...

  10. Robot Framework安装和入门

    1:安装 python 安装python并且配置好环境变量 2:安装 Robot Framework pip install robotframework 3:安装GUI界面 pip install ...