随笔分类 - 图论
摘要:题解 因为一棵树的权值被根节点各子节点的子树平分,因此可以求出叶子节点$i$的权值对根节点的贡献,设其为$\frac{1}{va_i}$。也就是说,对于节点$i$,$1$权值的比重是$\frac{1}{va_i \cdot a_i}$,而目标就是将这些叶子节点单位权值的比重统一,并使其最小。因为随着
阅读全文
摘要:题目链接 题解 因为度数最少为$k$,所以与$i$连接且不选的边最多为$deg_i-k$条。将$u$集合中的点与源点、将$v$集合中的点与汇点连接容量为$deg_i-k$($deg_i$为$i$号节点的度数)的边,保留原图中的边,容量为$1$。该图最大流未经过的边即为选择的边。不过暴力枚举$k$时间
阅读全文
摘要:题目链接 题解 可以发现 \(k\) 的取值范围只有 \(20\) ,可以枚举答案。若当前答案 \(i\) 成立,则合并在一起的珍珠后 \(i\) 位一定相等。因此对于每对珍珠 \((a,b)\) ,将 \(a\) 后 \(i\) 位的值与 \(b\) 后 \(i\) 位的值连边。易得若图中存在欧
阅读全文
摘要:题目链接 题解 令未给出的$b_i=b_+1$,模拟单调栈可得若干大小关系(若出栈则说明当前元素$<$栈顶元素,反之亦然)。若$a_i>a_j$,则由$i$向$j$连一条有向边,拓扑排序可得出排序后的排列。易证边数$\le 2n$,因此时间复杂度为$O(nlogn)$($p,x$需自行排序)。 AC
阅读全文
摘要:题目链接 题解 对于三元组$a$,从二元组$\overline\(到二元组\)\overline$连一条有向边。二元组转换为$62$进制的数保存,求全图的欧拉通路即可。此外,若直接使用邻接矩阵或邻接表存边,会因为访问大量已经过的边而超时(毕竟有重边,单个点会被搜索多次),时间复杂度最坏为$O(nm)
阅读全文
摘要:题目链接 题解 ⭐:Tarjan相关操作可以考虑搜索树 讨论2种情况:① 若节点$i$不是割点,则封锁它不会影响到无向图的连通性,\(ans=2\cdot (n-1)\)(自己出不去,别人进不来); ② 若节点$i$是割点,则封锁它会将全图分为多个连通分量。 对于第2种情况,设$i$的子节点$j$子
阅读全文
摘要:题目链接 题解 易得,将割边全部放在一边,让剩下的点组完全图即可得出最多边数。二分答案(\(m\)),如果$\lceil \frac{2} \rceil+\(完全图边数\)\ge m$即可行。 AC代码 #include<bits/stdc++.h> #define int long long us
阅读全文
摘要:题目链接 题解 LCA的拓展题哦。 LCA计算$dis(x,y)$(边数),如果为奇则不存在距离相等的房间。如果为偶,设$x,y$路径中与2点距离相等的节点为$a$。假设现在整棵树的根节点为$a$,$x$在$a$的子节点$b$的子树中,$y$在$a$的子节点$c$的子树中。易证,除$b,c$的子树以
阅读全文
摘要:题目链接 题解 ⭐:有环图上的dp很可能需要多次转移,只得使用类SPFA而非Dijkstra算法 $d$数组Dijkstra预处理即可。然后建反向图,dp。 状态:$dp[i][j]$表示第i个节点是否(\(j=1/0\))已使用2操作时的答案。 转移方程: \[ dp[v][0]=min(dp[v
阅读全文
摘要:题目链接 题解 $d$数组Dijkstra预处理即可。然后建反向图,dp。 状态:$dp[i][j]$表示第i个节点是否(\(j=1/0\))已使用2操作时的答案。 转移方程: \[ dp[v][0]=min(dp[v][0],dp[u][0]),dp[v][1]=min(dp[v][1],dp[u
阅读全文
摘要:题目链接 题解 ⭐:将转移条件倒推也是回溯dp路径的方法之一 可以发现,标签为1,3的节点与标签为2的节点各自互不相邻,由此想到二分图。将该图黑白染色(若无法染色则判断不可行),对于每个连通块1,3为其中一种颜色,2为其中一种颜色,如果存在大小为$n2$(或者$n3+n1$)的独立集则判断可行。连通
阅读全文
摘要:题目链接 题解 本题需要求出所有简单环所覆盖的边。可以发现所有简单环均为点双联通分量,因此可以求出所有点双连通分量,判断它们是否为环。求点双连通分量可以用tarjan,而环的边数一定等于点数。但是本题需要输出边,而一般tarjan中所求为点双中的点,因为一个点可以同时属于多个点双,使得找出点后反推边
阅读全文
摘要:题目链接 题解 下文将点$x,y$间的最短路长度称为$<x,y>$ 若将边$i$的权值赋为$0$,对于每组$a_j,b_j$有两种情况:最短路经过/不经过$i$。经过的情况花费$=<a_j,u_i>+<b_j,v_i>\(或\)<a_j,v_i>+<b_j,u_i>\(,不经过的情况预处理出未更改边
阅读全文
摘要:题目链接 题解 依题目所述,2种完成方法一定可以满足一种,以下为简单证明:若图中存在简单环,设该环长度为$l$。若$l\le k$,则满足条件1;若$l>k$,间隔取点可以得到包含$\lfloor \frac{2}\rfloor$个点的独立集,又因为$\lfloor \frac{2}\rfloor\
阅读全文
摘要:题目链接 题解 若树的重心为根节点,所有子树大小均小于树大小的$\frac{1}{2}$。易得,当树的重心并非根节点时,其一定在树的最大子树中。设最大子树重心为$cen$,$cen$的子树一定小于最大子树的$\frac{1}{2}\(,也小于整棵树的\)\frac{1}{2}$。因此我们只需不断上移
阅读全文
摘要:题目链接 题解 从$n,m\le 3\cdot 10^5$可看出,此题需在$logn$的时间内进行区间修改与单点查询。而描述操作位置的只有距离(子树深度)一个变量,可以想到以深度为关键字建立线段树或树状数组。 设点$i$深度为$pos_i$,对于每个操作将深度区间$[pos_,pos_+d_i]+x
阅读全文
摘要:题目链接 题解 可以发现,能够使另一个方格填色的三个方格的坐标可以写为$(a,b),(a,c),(c,d)\(,由\)(a,b)$以$a$为检索可以找到$(a,c)\(,而\)(a,c)$以$c$为检索找到$(c,d)$。由此想到,将行、列数构造为点,而每一个方格则是一条无向边。如题目样例3可构造为
阅读全文
摘要:题目链接 题解 下文将“以该节点为根时树的最大深度最小”的节点称为“最小节点”,并将“以最小节点为根时树的最大深度”称为“最小深度”。 题目给出的是无根树森林,易得对于每一棵树来说,使“最小节点”与其他树连接最优。而最终方案则是将所有树与“最小深度”最大(或第二大)的树建边,证明: 设树$A,B,C
阅读全文
摘要:题目链接 题解 答案一定可以为一条链,因为对于答案树中的每个节点将其子节点从大到小排序放入链尾后依旧成立。 探讨限制条件:(1)$b$只能为$n$,因为$n$一定是它所在连通分量中的最大值。(2)设$cnt_i$表示$i$作为$a$出现的次数,则$\sum\limits_^icnt_j<i$,因为每
阅读全文
摘要:题目链接 题解 可以发现,在一个强连通分量中,只要一个节点可以到达$s$节点,所有节点均可以到达。因此将强连通分量缩点,入度为0且不包含根节点的缩点个数即为答案。易证,入度不为0的缩点一定可以通过与它连接的缩点到达$s$节点。 AC题解 #include<bits/stdc++.h> using n
阅读全文

浙公网安备 33010602011771号