网络流

拆点/拆边技巧

题目来源

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. binary hacks读数笔记(nm命令)

    nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm Simple ...

  2. .net core 消息流处理流程

    前言 2020年即将进入尾声,分享一下在现公司业务处理流程,一起讨论在分布式场景下,如何通过消息流的方式处理各种复杂的业务场景,这里涉及到一些常用组件,后面结合场景与代码来具体说明 场景说明 这里就拿 ...

  3. 11Linux之软件包管理

    11Linux之软件包管理 目录 11Linux之软件包管理 11 软件包管理 11.1 软件包介绍 11.1.1 编程语言分类 11.1.2 三种安装包 11.2 rpm包管理 11.2.1 rpm ...

  4. Appium常用操作之「Toast提示信息获取」

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:Oschina.云+社区.知乎等各大平台都有. 目录 一.什么是 Toast 二.获取 Toast 提示信息的前提 1.针对这种元素,有的时候我们需要 ...

  5. SNMP介绍及使用,超有用,建议收藏!

    写在前面 如果你是对SNMP完全不了解,或者只想学习如何使用现成的SNMP工具,那你找对了文章,但如果你希望学习SNMP具体协议内容,推荐阅读官方的RFC文档. 1. 简介 SNMP(Simple N ...

  6. Spring MVC——项目的开发流程

    创建项目(IDEA下) 打开IDEA,我们开始创建一个简单的Spring MVC项目,流程如下: 这里要注意一下,我们是基于Maven开发项目,当然是要配置Maven环境的,如果大家之前从来没有配置过 ...

  7. DOM XSS详解

    DOM XSS简介 DOM XSS与反射性XSS.存储型XSS的主要区别在于DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析. DOM XSS复现 环境搭建 ...

  8. 精尽MyBatis源码分析 - MyBatis 的 SQL 执行过程(一)之 Executor

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  9. 学习Validator验证框架总结

    在项目开发中许多地方需要加以验证,对于使用if-else简单粗暴一个一个验证,spring的validation封装了Javax ValidationI校验参数,大大缩减了代码量. 以前的分层验证,从 ...

  10. Elements-of-Python01_Input/Output

    (内容包括输入input,输出print,注释comment,预测类型转换eval,命名与赋值Name & Bestow) 输入Input 和 输出Print Python中利用input() ...