07 2018 档案
摘要:题意:给定一个N个点的零图,M次操作,添加或删除一条边,每一次操作以后,打印用1,2,...N/2条边构成的匹配数。 分析:因为N的范围很小,所以可以把点的枚举状态用二进制表示集合。用一维数组dp[S]表示二进制集合为S的点集的匹配数。 每次加边操作,从大到小遍历集合,dp[S]+=dp[S-u-v
阅读全文
摘要:题意:求[L,R](1<=L<=R<=9e18)区间中所有能被自己数位上的非零数整除的数的个数 分析:丛数据量可以分析出是用数位dp求解,区间个数可以转化为sum(R)-sum(L-1)前缀和相减的形式。如果一个数能被所有位上数的最小公倍数(lcm)整除,便是符合要求的数。 但是直接传递一个数n的话
阅读全文
摘要:题意:判断一个有向图中的任意两点u、v,是否可以由其中一个点到达另一个点。 分析:这个问题转化以后就是:将该图强连通缩点后再判断其是否是单向连通的。缩点用Tarjan处理强连通分量。 有一个定理是这样的:一个有向图是单项连通的当且仅当其拓扑排序唯一。那么将这个子问题再转化为其缩点之后的图拓扑排序是否
阅读全文
摘要:题意:给定一个序列a[1..n],对于每个长度为m的连续子区间,求出区间的最大值和从左往右扫描该区间最大值的变化次数。 分析:先O(n)处理出整个序列的值。求出每个长度为m的连续区间中的最大值可以用单调队列求出,但同时要维护区间最大值的变化次数,即以区间最左边的元素为最小值的递增序列的长度。如果单纯
阅读全文
摘要:题意:给N个数M次操作,(1<=N,M<=3e5, 1<=ai<=1e6),1是使[L,R]中的每个元素变成其因子的个数之和;2是求[L,R]区间之和 分析:看上去就很线段树的一题,但是却思考了很久。发现1和2即使对其,也不会改变二者的值。而且一个大于2的数进行多次1操作,也最终会退化到2。 先预处
阅读全文
摘要:题意:求小于等于N且能被自己所有位上数之和整除的数的个数。 分析:裸的数位dp。用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数。这里mod的值就是小于等于N的数中,所有可能出现的数位之和。所以solve函数中需要对dfs函数做一个循环,
阅读全文
摘要:题意:有N个点M条边的无向图,每个点有给定的ai(1<=ai<=K,K<=200)表示该点拥有的物品编号,保证1-K在N个点全部出现。求每个点收集S个不同的物品所要走过的最短路程(边的长度为1)。 分析:N是1e5,如果直接对每个点搜索肯定超时。发现K的范围很小,而且1-K全部覆盖。那么考虑对所有1
阅读全文
摘要:题意:N个人,F种食物,D种饮料,给定每种食物和饮料的量。每个人有自己喜欢的食物和饮料,如果得到自己喜欢的食物和饮料才能得到满足。求最大满足的人数。 分析:如果只是简单地N个人选择F种食物的话可以用二分图匹配来完成,但是该题种一个人要选择两样东西。 采取以下操作建图: 增加源点和汇点,源点与F个食物
阅读全文
摘要:题意:有N(1<=N<=1e5)个人要移民到M(1<=M<=10)个星球上,每个人有自己想去的星球,每个星球有最大承载人数。问这N个人能否移民成功。 分析:可以用最大流的思路求解该问题,新建源点和汇点,源点与人间加入弧,流量为他想去的星球之和;星球和汇点间加入弧,流量为其承载数量;人和星球间加入弧,
阅读全文
摘要:题意:N个人,M个团体。每个人有属于自己的一些团体编号。将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少。 分析:一个一对多的二分图匹配,且是最大值最小化问题。二分图的多重匹配建立在匈牙利算法的基础上,令每个Y部的点可匹配多个点,但是规定其上限,超过上限就要在已有的匹配点中寻找
阅读全文
摘要:题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列。有两种操作:1.将a序列区间[L,R]中的数全部+1;2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i,如果ai<bi,那么该位置不能对结果做出贡献;而当某一次操作后,ai>=bi了,就对结果的贡献值+1
阅读全文
摘要:题意:求有向图的最小路径覆盖,但是点可以被多条路径重复走过! 求最小路径覆盖的问题:HDU1151, 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1151 分析:点能被重复覆盖是和单纯地求最小路径覆盖的区别,这样的话在一个弱连通子图中,可能出现中间结点
阅读全文
摘要:题意:有最少用多少条边不重复的路径可以覆盖一个张无向图。 分析:对于一个连通块(单个点除外),如果奇度数点个数为 k,那么至少需要max{k/2,1} 条路径。将奇度数的点两两相连边(虚边),然后先从奇度数的点出发,搜索由其出发的欧拉回路。需要将遍历的边和其反向边打标记,并在DFS退栈的时候记录边的
阅读全文
摘要:1.最小定点覆盖 = 最大匹配2.最大独立集 = 顶点数 - 最大匹配3.最大团 = 补图的最大独立集 【最小路径覆盖】 首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数. 一个PXP的有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点
阅读全文
摘要:题意:给定一个有向无环图,求最少划分几条路径,使之能够覆盖所有点。 分析:这可以转化为DAG上的最小路径覆盖问题。 路径覆盖的定义:有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好
阅读全文
摘要:题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图。Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化。简单的说,把d排序后
阅读全文
摘要:题意:对一个带权有向图,将所有点纳入一个或多个环中,且每个点只出现一次,求其所有环的路径之和最小值。 分析:每个点都只出现一次,那么换个思路想,每个点入度出度都为1。将一个点拆成两个点,一个作为入度点,一个作为出度点。每个入度点都和一个出度点匹配,且不为自己。那么可以将问题转化为二分图最优匹配的问题
阅读全文
摘要:题意:P个小朋友,每个人有喜欢的动物和讨厌的动物。留下喜欢的动物并且拿掉讨厌的动物,这个小朋友就会开心。问最多有几个小朋友能开心。 分析:对于每个动物来说,可能既有人喜欢又有人讨厌,那么这样的动物实际上建立了一对矛盾关系,将其视作一条边,连接有矛盾的两个小朋友。但是这样连边的话,相当于一个小朋友拆成
阅读全文
摘要:题意:对N个由(,)组成的字符串,求拼接后得到的最大的balance序列的长度。balance序列:空串/ A+B(A,B都是b序列)/ (+A+),A为b序列。此三种情况。 分析:在读入N每个字符串时,先将单独一个字符串中的b序列长度提取出来,记录其没有被使用的左弧L和右弧R的数目。因为要使其最后
阅读全文
摘要:题意:一个N*N的01矩阵,行与行、列与列之间可以互换。要求变换出一个对角线元素全为1的矩阵,给出互换的行号或列号。 分析:首先一个矩阵若能构成对角线元素全为1,那么矩阵的秩为N,秩小于N的情况无解。所以一个矩阵可以仅通过行变换不能得到最后结果,那么仅通过列变换或者行列变换都不能得到。 可以将行号看
阅读全文
摘要:题意:数量为N的序列,给定M个区间,要求对每个区间Li,Ri,都有al..r (l≤i<j≤r), ai≠aj。构造这个序列使其字典序最小。 分析:如果对于每个所给区间都暴力扫一遍,1e5的数据量肯定会TLE。其实有一些区间被其他区间完全覆盖,那么在处理其他区间的过程中,该区间已经被处理过了。用一个
阅读全文
摘要:题意:求两点之间最短路的数目加上比最短路长度大1的路径数目 分析:可以转化为求最短路和次短路的问题,如果次短路比最短路大1,那么结果就是最短路数目加上次短路数目,否则就不加。 求解次短路的过程也是基于Dijkstra的思想。算法中用一个二维数组d[u][tag](tag=0代表最短路,1代表次短路)
阅读全文
摘要:题意:就是判断图的最小生成树是否唯一,即求其最小生成树(MST)和次小生成树。 虽然是一道模板题,更重要的是理解求次小生成树的过程。求次小生成树建立在Prim算法的基础上。可以确定的是,次小生成树肯定是由最小生成树删去一条边再加上一条边得到。那么我们应该删去哪条边再加上哪条边呢?假设两点u,v之间有
阅读全文
摘要:题意:一张带权无向图中,有K条边可以免费修建。现在要修建一条从点1到点N的路,费用是除掉免费的K条边外,权值最大的那条边的值,求最小花费。 分析:假设存在一个临界值X,小于X的边全部免费,那么此时由大于等于X的边组成的图,从点1到点N走过的边数小于等于K,那么这个X就是所求的答案。所以可以通过二分答
阅读全文
摘要:题意:查询的是区间内每个数出现次数的平方×该数值的和。 分析:虽然是道莫队裸体,但是姿势不对就会超时。答案可能爆int,所以要开long long 存答案。一开始的维护操作,我先在res里减掉了a[pos]*cnt[a[pos]]*cnt[a[pos]],将cnt[a[pos]]+1,再将乘积加回。
阅读全文
摘要:题意:求点1到点2的路径中,权值最大的那条边,其最小值是多少。 分析:最大值最小化。可以将迪杰斯特拉模板中的松弛操作加以修改,在O(n^2)的时间内解决该问题。其中需要注意的是,dist[i]指的是:走到点i的路径上,权值最大的边权。当每次找到最小的dist[u]之后,松弛操作是:对于点v,若max
阅读全文
摘要:题意:N个数,M个查询,求[Li,Ri]区间内出现次数等于其数值大小的数的个数。 分析:用莫队处理离线问题是一种解决方案。但ai的范围可达到1e9,所以需要离散化预处理。每次区间向外扩的更新的过程中,检查该位置的数ai的出现次数是否已经达到ai或ai+1,以判断是否要更新结果。同理,区间收缩的时候判
阅读全文
摘要:题意:裸的莫队题,每个查询Li,Ri,返回区间[1,Li]和[Ri,N]区间中不同的数的个数。 分析:正常的离线查询,是求区间[Li,Ri]中要求的答案,而该题所求答案为外侧两个区间中的答案,那么cnt[i]维护的东西修改一下即可。对查询排序的时候,将R较大的排在前面,因为对于所维护的区间,是从两侧
阅读全文
摘要:题意:给一个N*N的矩阵C,和一个N*N的只由0和1组成的矩阵X。 X满足以下条件: 1.X 12+X 13+...X 1n=1 2.X 1n+X 2n+...X n-1n=1 3.任意 i (1<i<n), 都有 ∑X ki (1<=k<=n)=∑X ij (1<=j<=n). 求∑C ij*X
阅读全文
摘要:题意:N个点M条边的有向图,给定起点S和终点T,求每条边都不重复的S-->T的最短路有多少条。 分析:首先第一步需要找出所有可能最短路上的边。怎么高效地求出呢?可以这样:先对起点S,跑出最短路;对于每条边 e(u,v,w),若d[u]+w == d[v]。那么e就是最短路上的一条边。在前向星存储的图
阅读全文
摘要:题意:N个点,分别有属于自己的N个busyness(简称b),两点间若有边,则边权为(ub-vb)^3。Q个查询,问从点1到该点的距离为多少。 分析:既然是差的三次方,那么可能有负边权的存在,自然有可能出现负环。第一次用Dijkstra做,没多想,样例过了就去交了,结果肯定是WA了。之后加入了对负环
阅读全文
摘要:题意:有N个学生和N个老师,每个人都有自己的坐标X,Y,给每个学生匹配一个老师,要求N个匹配中的距离最大值最小。其中距离的定义为:|X − X’| + |Y − Y ‘|. 分析:一道典型的最大值最小化的题目,可以二分逼近的方法找到最小值。二分中的check操作就用匈牙利匹配来判断。在匹配的过程中加
阅读全文
摘要:题意:N个点,每个点有一个层号L,相邻的两层 Li 与 Li+1 之间的距离为C。另外给出M条无向边,求从点1到点N的最短路。 分析:同一层之间的两点距离并不是0,这是一个小坑。依次把相邻两层的所有点连边会导致复杂度很高。可以将每一层看作一个点,但是把它和层中的点连边会导致同层的两点距离为0。 为了
阅读全文
摘要:这道题也算是一道模板题,但是第一次用优先队列迪杰斯特拉就T了。1e6的数据量,给了8s,网上其他题解中说要用SPFA。 题意:N个点的带权有向图。每次都从1出发,要到达其余没有被访问过的一个点(发传单?),然后返回,过程中其余被访问的点不计算在内。求整个过程走过的最短路程。 分析:用原图跑SPFA计
阅读全文
摘要:一道差分约束系统的经典题。 题意:N个人,M个关系式,每个关系式给出ai,bi,ci,使得bi-ai<=ci(ai,bi代表人的编号,ci代表糖果数), 求第N个人在不打破所有关系式的前提下,最多能拿多少糖果。 分析:可以将每个人视作点,每个关系式视作边建图。对不等式bi-ai<=ci,将ai 视作
阅读全文
摘要:题意:将每件物品视作一个点,那么物品之间的价值交换就是一条有向边。本题中我们新建一个点 N+1 作为源点,那么需要做的就是找到一条从N+1 到1 的最短路。 根据题意可知,建立两条边的前提条件是其等级 L 之差 不超过 M。所以尝试把每个物品的等级都依次视作下界,每次都先将N个物品本身的价格作为边,
阅读全文