Graph Theroy

Prime21

self-introduction

  • Q:听说有自我介绍这个环节,你是哪里来的蒟蒻啊?
  • A:我不是哪里来的蒟蒻,我是这里的蒟蒻。
  • Q:21不是质数啊?你作何感想啊?
  • A:你分解质因数一下分出来的全是质数。
  • Q:你讲什么啊?
  • A:见第一页.thx.
  • Q:有多少题啊?
  • A:没什么题。题很少,很水,按时下课的策略大概是让大家把题在课上秒完。
  • Q:需要什么前置技能啊?
  • A:反正是不要“线段树套平衡树套替罪羊树套喜羊羊树套圣诞树套可持久化动态仙人掌”这种东西的。
  • Q:那是啥啊?我不会怎么办啊?
  • A:我也不会怎么办啊。听说树套树套树套树套树的复杂度是O((n+q)log^5(m))。还不如暴力。

QQ:pmxm-76@qq.com

Graph

前置技能:

1.会求最短路,欧拉回路。

2.知道一些特殊的图。

3.会建图

4.网络流

5.复杂度很迷的判负环

6.会tarjan

7.一点点数据结构知识

一个约定:一般而言后面的题目出现数据范围,我们考虑N表示点数,M表示边数

相信大家都会

Warm-up

ECR10.E Pursuit For Artifacts ext.

    一张无向图,有不少边被标记,现在要你从S出发走到T,问是否存在一条简单路满足S到T至少经过了一条被标记的边。

N,M \le 3*10^5
N,M3105N,M \le 3*10^5

原题:一次询问,ext:Q次询问,Q与N,M同阶。

Warm-up

ECR10.E Pursuit For Artifacts

  原题:我们考虑把S,T相连,问题视为走一个从S->S的环,然后求S所在的边双,如果存在一条被标记的边即为有解,否则无解。

  Ext:求边双后缩点,边双中任意一条边都能在某两点的路径上,一个有标记的边的边双我们视为缩点后这个点被标记,求两点直接是否存在被标记的边或者点。

Warm-up

图的度序列

  给一张无重边无自环无向图。给出每一个点的度。判断是否存在一张可能的图。

\sum _ {i=1}^{k} d_i \le k(k-1) + \sum_{i=k+1}^{n} min(d_i,k)
i=1kdik(k1)+i=k+1nmin(di,k)\sum _ {i=1}^{k} d_i \le k(k-1) + \sum_{i=k+1}^{n} min(d_i,k)

Erdős–Gallai theorem

d_1 \ge d_2 \cdots \ge d_n
d1d2dnd_1 \ge d_2 \cdots \ge d_n

对于每一个k检验一下,线性的。课前愉悦。没什么用。有兴趣的同学自己研究下。

Easy

  给出一个图,给出一条边。要求在上面找到一个点,使得到所有点的最短路的最大值最小,要求分数解。

 

边的中心

Easy

边的中心

经典问题,用来划水的。相信大家都会。

  我们设这条边的长度为L,两个顶点为u,v。假如我们已经算出u,v为源点的SSSP,记做disu,disv。设中心cen距离u为x那么,每一个点到中心的距离为min(disu[p]+x,disv[p]+L-x)。以x为变量的话将是一条折线。考虑再对不同的点取个max就是取所有折线的并的最上方那条线的最小值。

Easy

SGU270.Thimbles

  有n个杯子和一个球,这个球最开始在第一个杯子里,有m个操作,每个操作是交换两个杯子,你可以按照任意顺序执行这些操作,但是所有操作必须都被执行正好一次,问最终球可能在哪个杯子里。

  n<=100,m<=1000

Easy

辣鸡分类讨论题吃枣药丸。

好像不用怎么分类讨论(雾

记:cnt[x][y]表示x,y之间的边数。

Test1:考虑1是否最终能存在球。

有以下5种情况:

  1. 1和任何点不连通。
  2. 存在一个过1的环。
  3. 存在一个x使得,cnt[1][x]是大于0的偶数。
  4. 存在一个x使得,cnt[1][x]是奇数,且它在一个没有1的环里面。
  5. 存在两个点x,y,cnt[1][x]>1且cnt[1][y]>1。

Easy

辣鸡分类讨论题吃枣药丸。

记:cnt[x][y]表示x,y之间的边数。

Test2:考虑与1联通的其他点v是否最终能存在球。

有以下5种情况:

  1. 与1的最短路大于1。
  2. cnt[1][v]为奇数。
  3. 存在一个包含1,v以为的大小大于2的环。
  4. 存在一个包含1,不包含u的环。
  5. 存在一个包含u,不包含v的环。

HNOI2010 city

  给定一张N个点M条边的无向图,还有Q次操作。每次可以修改一条边的权值。允许离线,维护MST的权值和。

  CDQ分治+并查集/LCT

Easy

Easy

PARITREE

  给定一棵树,边权只有0和1,给定k个点对之间的边权异或和。求可能的树的方案数。

N,K \le 100000
N,K100000N,K \le 100000

Easy

PARITREE

  考虑路径异或和转换为到根的路径的异或和。变成两点是否同色。

考虑什么都不管的答案是2^(n-1)。我们考虑现在可以确定的边数,把确定的贡献除掉。

Medium

  求图的色数是NP-complete的。

  我们定义无向图的二色数,二色数k是说对这张图进行k染色时,还要满足每一个对颜色都至少对应在一条边上。

  不妨你可以认为这个问题还是NP-complete的。

  现在要你求大小为N(<=1000)的简单环的二色数。下图对应N=12的一种方案。

图的色数

Medium

图的色数

  事实证明,最后一个问题不是NPC的,二色数这个说法是我定义的,不知道求任意图的二色数是不是NPC的。不过这些问题都是N-prime21-Complete的。

  本题的做法是一个精妙的构造。

  先思考这个问题的对偶问题。如果已知二色数为k。我们至少需要多少个点呢?考虑我们如果不浪费任何一条,那么我们大可这样,对于每一个颜色向一半的颜色连边,另一半的颜色向它连边。对于颜色 k我们需要的边(点)数是       

  所以我们肯定可以确定这个图最多的染色数k。

  1.              ,考虑这个图本来就是欧拉图。我们把欧拉回路跑出来就行。

  2.                   ,我们考虑无论如何补一条边,你都把原来那个唯一的边给炸掉了。所以只好k-1。其余奇怪直接补新的点就好。

k\lfloor \frac{k}{2} \rfloor
kk2k\lfloor \frac{k}{2} \rfloor
n=k\lfloor \frac{k}{2} \rfloor
n=kk2n=k\lfloor \frac{k}{2} \rfloor
n=k\lfloor \frac{k}{2} \rfloor+1
n=kk2+1n=k\lfloor \frac{k}{2} \rfloor+1

Medium

Short Path

一张无向图,每一个点有一个0,1标记。一次询问,所有两个点标记均为1的点对中,距离最小的那一对。

N,M \le 100000
N,M100000N,M \le 100000

Medium

Short Path

  我们考虑把所有标记为1的点重新编号,按二进制分组,跑log次最短路就好

Medium

Opening Portals

   一个n个点,m条边的图,有k个关键点,在到达过的关键点之间可以瞬移,问从1号点开始经过所有关键点的最短路。

N,M \le 10^5 , val \le 10^9 , k \le n
N,M105,val109,knN,M \le 10^5 , val \le 10^9 , k \le n

Medium

Opening Portals

  • 一个naive的做法:暴力处理出所有关键点之间的最短路,对这些边做最小生成树。
  • 如何优化边数?
  • 考虑某一条边,经过它的最短路一定可以分成dis[u,x]+w[u,v]+dis[v,y]。
  • 考虑只有靠近它最近的关键点是有效的。我们把这些边入关键点即可。
  • 复杂度O(mlogn)

Medium

bzoj3597  

  给一个每一条边都满流的带费用的网络,现在给定把一条边的容量加1和减1的代价。现在通过调整容量,使得网络还是每一条边都满流。一个网络的代价定义为,调整容量的代价+每一条边的费用*每一条边的流量。X为原网络的代价,Y为现在的代价,k为调整次数,最小化:

\frac{X-Y}{k}
XYk\frac{X-Y}{k}

Medium

bzoj3597  

显然是一个分数规划问题。

  原图中存在的一条x->y的边,如果流量增加,对应一条x->y费用为w+a的边,如果流量减少,对应一条y->x费用为b-w的边。考虑流量平衡,我们需要每一次选一个环,那么就变成了选一个最小平均环问题。

Hard

UOJ53

  给一棵树,每个点有权值wi (wi>0)。

  对于第i个点给定三个参数ai,bi,ci, 第i个点只能走向ai,bi,ci这三个点在原树中两两之间的路径上的点。

  一个长度为l的序列s1,s2,...,sl的权值定义为                , 这个序列中对于任意1≤i<l都要满足si能走向si+1

  求权值前k小的序列的权值。

n,k \le 5*10^5
n,k5105n,k \le 5*10^5
\sum\limits _{i=1}^{l} w_{s_i}
i=1lwsi\sum\limits _{i=1}^{l} w_{s_i}

Hard

UOJ53

  一个机智的暴力的做法:把每一个序列视作一个点,向所有在该序列后加一个数生成的新数列连边。图不用完全建出,边做边建。复杂度是O(nk log nk)的。

  考虑优化暴力:重新定义状态表示S(w,x,l,r)表示现在序列的权值,选的最后一个点,当前的可选择区间。现在我们每次扩展只有三种可行的情况。复杂度是O(k log k)的。

Made with Slides.com