网络流

拆点/拆边技巧

题目来源

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. python之ftp与paramiko与hasattr与getattr

    为了方便树莓派和电脑上相互传输数据文件的传输.也就是上传和下载文件,我自己就写了一个ftp 主要是运用到hasattr与getattr 先看一下服务器上的程序吧 # _*_coding:utf-8_* ...

  2. .Net orm 开源项目 FreeSql 2.0.0(满意的答卷)

    写在开头 2018年11月头脑发热到今天,一晃已经两年,当初从舒服区走向一个巨大的坑,回头一看后背一凉. 两年时间从无到有,经历数不清的日夜奋斗(有人问花了多长时间投入,答案:全职x2 + 两年无休息 ...

  3. ABBYY FineReader 14扫描和保存文档

    在ABBYY FineReader 14中您可以使用扫描"新建任务"窗口选项卡上的内置任务创建各种格式的数字文档.本文介绍使用FineReader 14扫描和保存文档的方法. 1. ...

  4. 在CorelDRAW中如何完成属性的复制

    复制功能在任何一个编辑软件中都是必不可少.使用率很高的一个功能,在矢量图形设计软件CorelDRAW 中也不例外.关于对象的复制这里就不过多示意了,主要为大家示范一下如何在设计中复制对象的一些属性. ...

  5. 【xmind converse excel】测试用例定制化小工具

    背景 公司使用jira, jira写测试用例,jira可以通过execl导入进jira, 生成测试用例,但是模板很不统一,如果只是再execl中修改,又觉得及其的麻烦,所以写了一个xmind 转化为定 ...

  6. zabbix 监控文件夹

    安装inotify wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar -zx ...

  7. 自己动手实现java数据结构(九) 跳表

    1. 跳表介绍 在之前关于数据结构的博客中已经介绍过两种最基础的数据结构:基于连续内存空间的向量(线性表)和基于链式节点结构的链表. 有序的向量可以通过二分查找以logn对数复杂度完成随机查找,但由于 ...

  8. LeetCode周赛#208

    本周周赛的题面风格与以往不太一样,但不要被吓着,读懂题意跟着模拟,其实会发现并不会难到哪里去. 1599. 经营摩天轮的最大利润 #模拟 题目链接 题意 摩天轮\(4\)个座舱,每个座舱最多可容纳\( ...

  9. Java集合【5】-- Collections源码分析

    目录 一.Collections接口是做什么的? 二.Collections源码之大类方法 1.提供不可变集合 2.提供同步的集合 3.类型检查 4.提供空集合或者迭代器 5.提供singleton的 ...

  10. 数论之prufer序列

    定义 \(Prufer\) 数列是无根树的一种数列. 在组合数学中,\(Prufer\) 数列由有一个对于顶点标过号的树转化来的数列,点数为 \(n\) 的树转化来的 \(Prufer\) 数列长度为 ...