ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一轮复习

2019-06-09 11:04:16  阅读:218  来源: 互联网

标签:标号 遍历 复习 复杂度 一轮 vis dfn dp


知识点梳理

Day1 6.7

可能是图论专题吧

Tarjan求强连通分量

  • dfn[]表示dfs序的标号
  • low[]表示能连到的最小的dfn标号的点的标号
  • sta[],top是栈
  • instack[]标号是表示这个点在栈中,还是已经遍历完被弹栈了
  • col[]记录每个点所在的颜色

1.Tarjan缩点后是一张拓扑图

2.标号的倒序是这张拓扑图一个合法的拓扑序

Tarjan求双连通分量,割点与桥

  • dfn[]表示dfs序的标号
  • low[]表示能连到的最小的dfn标号的点的标号
  • sta[],top建立一个栈
  • 并没有instack

1.是点双而不是边双的只有两点一线

2.边双缩点后是一棵树

3.一个点可能再多个点双中,于是我们求点双的时候需要在儿子处进行统计low[v] >= dfn[u]

Day2 6.8

昨天打比赛然后今天颓废去了

所以还是图论

争取完结图论?(不可能的。。

最短路

Floyd

这个没啥好说的\(f[i][j]\)表示从\(i\)到\(j\)的最短路,要先枚举中介点\(k\),顺序不能错

因为这实际上是个三维的滚动数组

复杂度\(O(n^3)\)

Dijkstra

  • dis[]距离数组,初始设成正无穷
  • vis[]标记是否访问过
  • 一个优先队列,里面扔一个pair是距离和标号,为了方便一般把距离取负,因为优先队列返回最大值

1.不能处理带负权的边

优化后是\(O((n + m)\log n)\)

Bellman-Fold算法

就是SPFA复杂度的上界吧,还是SPFA好写,过了

复杂度\(O(nm)\)

K短路

会玄学A*可以水过很多题啊

有一个论文算法,关于可持久化平衡树维护最短路树的

最小生成树

prim

  • dis[]表示每个点距离当前联通块距离最小是多少
  • 每次选择一个最小的点加入然后删掉它的距离

复杂度\(O(n^{2})\),可以类似dij的优化但是优化之后不如kruskal

kruskal

  • 直接把边排序,然后加个并查集就好了

复杂度\(O(E \log E)\)

kruskal的正确性可以在很多思维题求最小生成树中作为优化边数的一种方法

二分图

匈牙利算法

  • matc[]数组表示\(Y\)部的点匹配的\(X\)部点是什么
  • vis[]当前这个\(Y\)部点有没有被遍历过
  • 每次清一遍vis,可以只连从\(X\)到\(Y\)的边

复杂度\(O(n^3)\)

KM算法

  • ex_l[]表示左部期望的最大值,初始是每个点能连的最大值
  • ex_r[]表示右部期望的最大值,初始都是0
  • slack[]表示断层,每次在不能取的时候取最小
  • 注意每次只把遍历过的点的期望值,左边减小,右边加大,其余不动,因为我是失败了以后给这个点能到的一些点加入至少一条可以供新选择的边

复杂度\(O(n^3)\)但常数非常小,适合梦想选手

2-SAT

  • 建图,缩点,Tarjan的标号的正序选择即可

四种连边

(A,B)不能同时取

那么选了A必须选B',选了B必须选A'

A->B' B->A'

(A,B)不能同时不取

那么选了A'必须选B,选了B'必须选A

A'->B B'->A

(A,B)要么都取,要么都不取

那么选了A'必须选B',选了B'必须选A',选了A必须选B,选了B必须选A

A'->B' B'->A' A->B B->A

(A,A')必须选A

A’->A

选了A'必须选A,保证了A拓扑序在前

解的多解依赖于拓扑序的多情况,这样的话去除了A'在A前面的情况

Day3 6.9

今天写树

圆方树

Tarjan缩点即可

具体题目具体分析了

基环树

  • 遍历整个树的时候遇到一条非树边,记录下来,这条边加树边一定是一个环

会出的题一般都是讨论环上的如何操作

点分治

  • 一个遍历的函数
    • vis[]表示这个点有没当重心,遍历的时候和求重心的时候只经过vis=0的点
  • 一个计算重心的函数
    • son[]重儿子
    • fa[]父亲
    • size[]子树大小
    • 还有一个队列
    • 进队列时清零
  • 可能还会有对树进行遍历计算的函数

经常按照过重心和不过重心两种方式考虑

多叉树转二叉树,即左儿子右兄弟

左儿子右兄弟

动态点分治

实质非常暴力,就是在假如叶子的时候,走到重心的路径,若遇到一棵树大小超标,则重构之

斯坦纳树

我怎么会这么个玩意

\(dp[i][S]\)表示特殊点的点集为\(S\),根为\(i\)的最小代价

然后转移有两种,一种是以同一个点为根

\(dp[i][S] = min(dp[i][T] + dp[i][S \oplus T],dp[i][S])\)

一种是从另一个根换过来

\(dp[i][S] = min(dp[j][S] + w[i][j],dp[i][S])\)

前面是子集枚举,后面是暴力

标签:标号,遍历,复习,复杂度,一轮,vis,dfn,dp
来源: https://www.cnblogs.com/ivorysi/p/10987798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有