Prime21
self-introduction
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至少经过了一条被标记的边。
原题:一次询问,ext:Q次询问,Q与N,M同阶。
Warm-up
ECR10.E Pursuit For Artifacts
原题:我们考虑把S,T相连,问题视为走一个从S->S的环,然后求S所在的边双,如果存在一条被标记的边即为有解,否则无解。
Ext:求边双后缩点,边双中任意一条边都能在某两点的路径上,一个有标记的边的边双我们视为缩点后这个点被标记,求两点直接是否存在被标记的边或者点。
Warm-up
图的度序列
给一张无重边无自环无向图。给出每一个点的度。判断是否存在一张可能的图。
对于每一个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种情况:
Easy
辣鸡分类讨论题吃枣药丸。
记:cnt[x][y]表示x,y之间的边数。
Test2:考虑与1联通的其他点v是否最终能存在球。
有以下5种情况:
HNOI2010 city
给定一张N个点M条边的无向图,还有Q次操作。每次可以修改一条边的权值。允许离线,维护MST的权值和。
CDQ分治+并查集/LCT
Easy
Easy
PARITREE
给定一棵树,边权只有0和1,给定k个点对之间的边权异或和。求可能的树的方案数。
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。其余奇怪直接补新的点就好。
Medium
Short Path
一张无向图,每一个点有一个0,1标记。一次询问,所有两个点标记均为1的点对中,距离最小的那一对。
Medium
Short Path
我们考虑把所有标记为1的点重新编号,按二进制分组,跑log次最短路就好
Medium
Opening Portals
一个n个点,m条边的图,有k个关键点,在到达过的关键点之间可以瞬移,问从1号点开始经过所有关键点的最短路。
Medium
Opening Portals
Medium
bzoj3597
给一个每一条边都满流的带费用的网络,现在给定把一条边的容量加1和减1的代价。现在通过调整容量,使得网络还是每一条边都满流。一个网络的代价定义为,调整容量的代价+每一条边的费用*每一条边的流量。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小的序列的权值。
Hard
UOJ53
一个机智的暴力的做法:把每一个序列视作一个点,向所有在该序列后加一个数生成的新数列连边。图不用完全建出,边做边建。复杂度是O(nk log nk)的。
考虑优化暴力:重新定义状态表示S(w,x,l,r)表示现在序列的权值,选的最后一个点,当前的可选择区间。现在我们每次扩展只有三种可行的情况。复杂度是O(k log k)的。