
图论
文章平均质量分 52
Frozen_Guardian
已退役菜鸡Acmer
展开
-
(转)网络流-最大流 SAP算法(模板)
今天做了一个毒瘤题把dinic卡了,不想因为优化常数改变习惯性的写法,干脆就直接去找个效率更高的算法拿来用多好注意这套板子的n要在全局变量中用,并且n是所有点的数量(包括源点和汇点),所以在有的时候需要n+=2,与我的习惯还是有一丢丢小不同,不过问题不大%kuangbin大神代码:const int N=1e5+100;//点数的最大值const int M=2e5+100;...转载 2019-12-18 19:08:02 · 236 阅读 · 0 评论 -
费用流:最大费用最大流和最小费用最大流(模板)
主要是思维建边,建有向边,然后跑模板就行了可以解决KM算法所能解决的问题(完全取代)可以解决非完备匹配问题中的最大权匹配和最小权匹配,分别对应着最大费用最大流和最小费用最大流模板:最大费用最大流:const int N=1e5+100;//点const int M=1e5+100;//边struct Edge{ int to,w,cost,next;}edge[...原创 2019-11-22 01:27:18 · 1157 阅读 · 0 评论 -
网络流-最大流 dinic+当前弧优化(模板)
用法:在原有向图的基础上,增加源点s和汇点t,并将s与左子集建边,t与右子集建边:边权都设为1,则就是求二分图最大匹配 右子集与t的边权大于1,则就是求二分图最大多重匹配模板代码:const int N=210; struct Edge{ int to,w,next;}edge[N*N];//边数 int head[N],cnt; void addedge(int ...原创 2019-11-21 20:01:30 · 455 阅读 · 2 评论 -
二分图最大权匹配算法KM
有个博客理解起来很棒,描述的生动形象,插眼:https://blog.youkuaiyun.com/chenshibo17/article/details/79933191用处:给定一张二分图,二分图的每一条边都带有一个权值,求出该二分图的一组最大匹配,使得匹配边的权值总和最大,注意,二分图带权最大匹配的前提是匹配数最大,然后再最大化匹配边的权值总和局限性:只能满足“带权最大匹配一定是完备匹配”的图中...原创 2019-11-14 19:57:33 · 931 阅读 · 0 评论 -
(转)莫队算法+树上莫队算法模板
莫队算法,说白了就是优雅的暴力,在我的理解看来就是排序+尺取的组合插眼:莫队算法插眼:树上莫队树上莫队就是利用dfs序的升级版,欧拉序将树转换成线性区间区间来操作即可莫队模板:del函数和add函数需要根据题意随机应变const int N=1e5+100;int size,n,m,ans[N],a[N];struct query{ int l,r,id; bo...转载 2019-11-08 12:42:25 · 449 阅读 · 0 评论 -
2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 占座位(最小割)
题目大意:给出一个 n∗mn*mn∗m 的矩阵,每个格子都有两个权值 aaa 和 bbb,分别代表花费和收益。一个格子被占,当且仅当:格子上有人格子的上下左右都有人格子被占可以获得收益 bbb,格子上有人需要花费 aaa,问如何分配可以使得收益最高。题目分析:很经典,但我不会的一个模型。拆点最小割,首先棋盘问题不难想到奇偶拆点,在此基础上将每个点再拆一下用来维护 bbb,再加点无穷大的边用来调和 aaa:上图中 x1x_1x1 和 x2x_2x2 是奇数点的入点和出点, y1y_1y1原创 2021-10-31 20:55:01 · 769 阅读 · 4 评论 -
UOJ - #117. 欧拉回路(模板)
题目链接:点击查看题目大意:给出一个 nnn 个点 mmm 条边的图,可能是有向图或无向图,求一条欧拉回路题目分析:有个小坑点就是图必须是联通的代码:// Problem: #117. 欧拉回路// Contest: UOJ// URL: https://uoj.ac/problem/117// Memory Limit: 256 MB// Time Limit: 1000 ms// // Powered by CP Editor (https://cpeditor.org)// #原创 2021-08-22 16:15:26 · 223 阅读 · 0 评论 -
洛谷 - P7771 【模板】欧拉路径(Hierholzer算法)
题目链接:点击查看题目大意:给出一个 nnn 个点 mmm 条边的有向图,需要输出字典序最小的欧拉路径题目分析:个人感觉Hierholzer算法的精髓还是需要理解为什么答案时dfs时的后序遍历的逆序,而不是前序遍历代码:// Problem: P7771 【模板】欧拉路径// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P7771// Memory Limit: 128 MB// Time Limit: 1000 ms//原创 2021-08-22 12:30:53 · 595 阅读 · 0 评论 -
2021牛客多校6 - Defend Your Country(点双缩点求割点)
题目链接:点击查看题目大意:给出一个 nnn 个点和 mmm 条边组成的无向图,每个点都有点权,现在可以删除掉任意条边,问如何才能使得贡献和最大贡献和是指,当删掉边后,对于每个连通块而言,如果连通块内点数为奇数,那么贡献和减去点权和,如果连通块内点数为偶数,那么贡献和加上点权和题目分析:因为题目保证了是连通图,所以当 nnn 为偶数时显然输出所有点的点权之和是最优的,当 nnn 为奇数时,只需要删掉一个点一定是最优的证明里的圆方树涉及到了我的知识盲点,过两天会去学的。。所以对于本题而言只能大力猜结论原创 2021-08-03 00:06:00 · 470 阅读 · 0 评论 -
HDU - 7009 树上游走(树的直径+容斥)
题目链接:点击查看题目大意:给一棵树,称一个点集 S 是好的当且仅当存在一个点,其到 S 中所有点的距离互不相同,求 |S| 的最大值和使得 |S| 最大的 S 的个数题目分析:不难看出 ∣S∣|S|∣S∣ 就是树的直径,而满足条件的 SSS 的个数,无非就是枚举每个点作为树的根节点,然后将 nnn 个节点按层划分,每一层恰好选择一个点的方案数,这个可以根据乘法原理,将每一层节点的个数累乘起来即可。这样确实可以计算出所有的答案,但是会有重复。不过通过思考后可以看出,重复的部分当且仅当 SSS 中的点是原创 2021-08-01 20:42:13 · 375 阅读 · 2 评论 -
2021牛客多校3 - Minimum grid(二分图最大匹配-最大流)
题目链接:点击查看题目大意:给出一个 n∗nn*nn∗n 的棋盘,其中有 mmm 个位置是需要填数字的位置,每个位置需要填 [0,k][0,k][0,k] 的数字中的其中一个,可以重复,现在给出每一行的最大值和每一列的最大值,要求填出一种合法的方案,且权值和最小,题目保证一定有解题目分析:首先考虑行和列的最大值,记为 xxx,找到最大值需要等于 xxx 的行和列,设有 nnn 行和 mmm 列的最大值需要等于 xxx。原本是需要在每一行、每一列共 n+mn+mn+m 个位置放置 xxx,发现如果在他们原创 2021-07-25 14:55:51 · 332 阅读 · 1 评论 -
2021牛客多校3 - Black and white(思维+最小生成树)
题目链接:点击查看题目大意:给出一个 n∗mn*mn∗m 的矩阵,初始时都是白色,可以花费掉 cost[i][j]cost[i][j]cost[i][j] 将格子 (i,j)(i,j)(i,j) 染黑,也可以通过魔法选择两行 x1,x2x1,x2x1,x2 和两列 y1,y2y1,y2y1,y2,如果标记中的四个点有三个点是黑色的,那么第四个点可以直接被染黑问矩阵被染黑的最小贡献题目分析:比赛的时候分析出来只需要选择 n+m−1n+m-1n+m−1 个点就可以满足条件了,但是没有思考出来这些点之间的关原创 2021-07-25 11:10:18 · 311 阅读 · 0 评论 -
2021牛客多校2 - Stack(单调栈+拓扑)
题目链接:点击查看题目大意:给出 b[i]b[i]b[i] 数组的求解过程:Stk is an empty stackfor i = 1 to n : while ( Stk is not empty ) and ( Stk's top > a[i] ) : pop Stk push a[i] b[i]=Stk's size现在给出 bbb 数组的 kkk 个位置,要求构造出一组合法的数组 aaa 作为答案题目分析:任意解感觉没有什么可扩展性,所以原创 2021-07-21 11:56:40 · 433 阅读 · 0 评论 -
CodeForces - 1476E Pattern Matching(字典树+拓扑)
题目链接:点击查看题目大意:给出 nnn 个模式串和 mmm 个匹配串,题目要求输出一种模式串的排列方式,使得 mmm 个模式串从头开始匹配的话,可以匹配到相应的模式串模式串的长度不超过 444,两两互不相同,含有通配符 “_”题目分析:一开始想的是对模式串状压,模式串的每个位置都有 262626 种情况,一个模式串可以匹配 4264^{26}426 个匹配串,可以预处理哈希,但是后续的处理不太会快速建图,遂放弃看了题解后发现可以反过来想,每个匹配串若想匹配模式串,那么每个位置要么匹配原字符,要么匹原创 2021-07-21 08:31:16 · 229 阅读 · 0 评论 -
CodeForces - 1547G How Many Paths?(强联通缩点+拓扑)
题目链接:点击查看题目大意:给出一张有向图,无重边,有环,现在需要判断每个点和点 111 的关系:000:点 111 无法到达点 uuu111:点 111 到点 uuu 有且仅有一条路径222:点 111 到点 uuu 有大于一条路径,但是路径数是有限的−1-1−1:点 111 到点 uuu 的路径数是无限的题目分析:直接强联通缩点将原图转换成一个 DAGDAGDAG,然后直接拓扑就可以了,边拓扑边转移 dpdpdp,也就是答案,dpdpdp 的方程自己分成 4∗4=164*4=164∗4=原创 2021-07-12 19:17:11 · 611 阅读 · 0 评论 -
上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
题目链接:点击查看题目大意:给出一个有 nnn 个点的无向图,要求将其分成两个集合,使得总权值最大,每个集合需要非空题目分析:SW模板题,套上即可代码:// Problem: Dahno Dahno// Contest: NowCoder// URL: https://ac.nowcoder.com/acm/contest/17574/D// Memory Limit: 524288 MB// Time Limit: 2000 ms// // Powered by CP Editor (原创 2021-06-16 19:07:52 · 186 阅读 · 0 评论 -
POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)
题目链接:点击查看题目大意:给出一张无向图,要求将其分为两个集合,使得最小割最小题目分析:算法学习自:https://blog.youkuaiyun.com/dingdi3021/article/details/101960508全局最小割,用类最大生成树实现的,时间复杂度 O(n3)O(n^3)O(n3)代码:// Problem: Minimum Cut// Contest: Virtual Judge - POJ// URL: https://vjudge.net/problem/POJ-2914原创 2021-06-16 19:06:12 · 209 阅读 · 0 评论 -
兰州大学第一届『飞马杯』程序设计竞赛 - ★★体育课排队★★(二分+最大流)
题目链接:点击查看题目大意:给出 nnn 个人,再给出 nnn 个指定位置,每个人每秒钟可以向上下左右四个方向移动一个单位,问最少需要多长时间,才能使所有人都到达指定位置题目分析:数据比较小,可以直接二分时间然后跑最大流 checkcheckcheck,输出路径也是中规中矩的,注意行末空格就好啦代码:// Problem: ★★体育课排队★★// Contest: NowCoder// URL: https://ac.nowcoder.com/acm/contest/16520/B// Mem原创 2021-05-29 20:11:08 · 259 阅读 · 0 评论 -
CodeForces - 1498E Two Houses(交互+图论,结论题)
题目链接:点击查看题目大意:给出一个由 nnn 个点组成的竞赛图,现在要求出一组点对 (A,B)(A,B)(A,B),满足两个点可以互达,且入度的绝对值之差最大题目分析:结论题,先放结论:结论:竞赛图强连通缩点后的DAG呈类似于链状,前面的所有点向后面的所有点连边,即拓扑序在前的SCC的任意一节点的入度严格小于拓扑序在后的SCC的任意一节点入度有了这个结论后,就可以 O(n2)O(n^2)O(n2) 还原出所有的无向边,按照入度绝对值之差贪心排序,每次询问度数较大的点是否可达度数较小的点即可这里还原创 2021-05-22 22:03:45 · 351 阅读 · 0 评论 -
CodeForces - 1520G To Go Or Not To Go?(bfs)
题目链接:点击查看题目大意:给出一个 n∗mn*mn∗m 的矩阵,其中:−1-1−1:该位置是个墙000:该位置可以通过x(x>0)x(x>0)x(x>0):该位置是传送门对于任意两个传送门,可以花费其权值和的代价相互到达也可以花费 www 向上下左右四个方向移动问从 (1,1)(1,1)(1,1) 到 (n,m)(n,m)(n,m) 的最小花费是多少题目分析:一开始想到了对传送门建一个超级源点,将所有传送门都与超级源点相连然后跑迪杰斯特拉,但是这样就有 1e71e71原创 2021-05-09 20:44:54 · 421 阅读 · 0 评论 -
CodeForces - 1521D Nastia Plays with a Tree(树上最小路径覆盖)
题目链接:点击查看题目大意:给出一棵树,可以删除 xxx 条边并增加 xxx 条边使得树变为竹子,竹子就是一条链,问 xxx 最小可以为多少,输出一种方案数题目分析:树上最小路径覆盖,按照子节点个数分两种情况讨论即可:son[u]==2son[u]==2son[u]==2:删除掉 uuu 和 fa[u]fa[u]fa[u] 这条边即可son[u]>2son[u]>2son[u]>2:删除掉 uuu 和 fa[u]fa[u]fa[u] ,并且删除掉 son[u]−2son[u]-2原创 2021-05-09 20:30:02 · 523 阅读 · 0 评论 -
HDU - 6184 Counting Stars(思维+三元环)
题目链接:点击查看题目大意:给出一个 nnn 个点 mmm 条边组成的无向图,问图中有多少个“三元环对”,“三元环对”指的是两个三元环共用了一条边题目分析:可以先计算出每条边被多少个三元环占用,然后组合数学统计一下答案就好了代码:// #pragma GCC optimize(2)// #pragma GCC optimize("Ofast","inline","-ffast-math")// #pragma GCC target("avx,sse2,sse3,sse4,mmx")#inclu原创 2021-05-06 23:08:37 · 216 阅读 · 0 评论 -
洛谷 - P1989 无向图三元环计数(思维建图)
题目链接:点击查看题目大意:给出一个 nnn 个点 mmm 条边组成的无向图,求三元环的个数题目分析:对于原图建新图,对于原来的每条边来说如果度数不同,度数小的点指向度数大的点如果度数相同,编号小的点指向编号大的点得到的是一个有向无环图,也就是DAG,然后直接暴力就可以了,可以证明时间复杂度是 O(mm)O(m\sqrt {m})O(mm) 的代码:// #pragma GCC optimize(2)// #pragma GCC optimize("Ofast","inline","-原创 2021-05-06 18:55:46 · 343 阅读 · 0 评论 -
CodeForces - 787D - Legacy(线段树优化建图+最短路)
题目链接:点击查看题目大意:给出 nnn 个点和 mmm 条边,现在需要求从 ststst 开始到所有点的最短路是多少,mmm 条边的给出方式如下:1 u v w1 \ u \ v \ w1 u v w:点 uuu 向点 vvv 连一条权值为 www 的边2 u l r w2 \ u \ l \ r \ w2 u l r w:点 uuu 向点 i∈[l,r]i原创 2020-12-24 17:48:31 · 307 阅读 · 3 评论 -
CodeForces - 1463E Plan of Lectures(拓扑排序+并查集缩点)
题目链接:点击查看题目大意:给出一棵有根树,树边都是有向边,再给出 kkk 个关系 (x,y)( x , y )(x,y),其意义是访问完点 xxx 后需要立即访问点 yyy,问是否存在一种合适的拓扑序题目分析:因为题目说明了 kkk 个关系实际上也是一种绑定关系,在访问点 xxx 后需要立即访问点 yyy,所以不妨直接将点 yyy 与点 xxx 合并在一起,更具体的说,可以将 xxx 和 yyy 进行缩点,然后对缩点后的图进行拓扑,稍微画一下样例的图就能明白了:剩下的注意一下细节直接实现就可以原创 2020-12-20 13:20:41 · 491 阅读 · 0 评论 -
CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)
题目链接:点击查看题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类:一定是最小生成树上的边可能是最小生成树上的边一定不是最小生成树的边题目分析:两种思路,一种是比较好想,但是写起来比较麻烦,还有点卡常,另一种是需要一定的思维,相应的实现起来也是比较简单先说需要思维的方法,参考克鲁斯卡尔的实现方法,不难看出权值较大的边一定不可能有机会去替换掉权值较小的边,所以如果一条边可能出现在多个最小生成树上时,一定是可能会被其他同权值的边替换,所以在实现克鲁斯卡尔原创 2020-12-18 17:43:00 · 339 阅读 · 4 评论 -
CodeForces - 817F Graph and String(dfs判二分图)
题目链接:点击查看题目大意:给出一张图,现在要求给出一种合适的染色方案,使得:只能用 ' a ' , ' b ' , ' c ' 进行染色 有边相连的两个点的颜色要么相同,要么相邻,不能是 ' a ' 和 ' c ' 没有边相连的两个点的颜色只能是 ' a ' 和 ' c '题目分析:基于第三个条件,不难看出原图的补图如果不是一个二分图时,答案一定是 No,因为无法处理所有情况三而当原图的补图是一个二分图时,相当于只满足一个必要条件,还需要判断一下情况二作为充分条件才行,只有同时满足了情况原创 2020-11-26 22:17:39 · 297 阅读 · 3 评论 -
CodeForces - 1454E Number of Simple Paths(基环树+思维)
题目链接:点击查看题目大意:给出一棵 n 个点的基环树,现在需要求所有长度大于等于 1 的路径个数题目分析:对于所有的路径 ( x , y ) 可以分成下列两种情况来考虑:路径不会经过环上的边:此时点 x 和点 y 之间的路径是唯一的 路径会经过环上的边:此时点 x 和点 y 之间的路径有两条,一条是沿着环顺时针走,另一条是沿着环逆时针走当然直接正向去考虑应该也是可以做出来的,但这个题比较优秀的一种思路是正难则反,首先假设所有的路径都会经过环上的边,然后再统计有多少个点对 ( x , y )原创 2020-11-25 17:40:03 · 398 阅读 · 0 评论 -
2020CCPC(长春) - Combination Lock(二分图博弈)
题目大意:给出一个密码锁,两个人一起玩游戏,给出初始的密码,规定:每一次都可以转动一个位置的数字一个单位 不可以转动到已经出现过的数字 不可以转动到被 ban 掉的数字无法转动的人视为失败,问谁能获胜题目分析:二分图博弈的模板题,定义参考:https://blog.youkuaiyun.com/qq_36797743/article/details/80043107对于此题而言,每次将数字的某个位置转动一个单位,其数位和的奇偶性会发生变化,从这里入手,将所有数字拆分成一张二分图建图如下:源..原创 2020-11-11 21:31:21 · 801 阅读 · 0 评论 -
中石油训练赛 - Swapping Places(字典序最小的拓扑排序)
题目链接:点击查看题目大意:给出 s个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作,可以使得整个字符串的字典序最小题目分析:感觉很好的一道图论题,因为建图实在是非常的巧妙正难则反,考虑对于两个种类的动物来说,如果其不是朋友关系的话,那么在序列中,其相对位置无论如何都是不会改变的所以最简单的一个思路就是,设 a[ i ] ,i ∈ [ 1 , n ] 为:第 i 个元素的种类,设 .原创 2020-11-02 12:28:58 · 477 阅读 · 0 评论 -
牛客 - 牛半仙的妹子Tree(按询问分块+RMQ求LCA)
题目链接:点击查看题目大意:给出一棵有 n 个节点的树,需要执行 m 次操作:1 x:点 x 被染色,且随后每一秒染色的区域都会向外扩展一个单位 2 x:清空所有的染色 3 x:问点 x 是否被染色题目分析:因为可以离线,所以考虑按照询问分块,首先用序列自动机求出每次操作后的下一次操作 2,然后分两种情况处理:如果两次操作 2 的间隔大于 sqrt( m ),直接暴力 bfs 去模拟,每一块的时间复杂度为 O( n ),均摊之后是 O( sqrt( m ) * n ) 如果两次操作 ..原创 2020-10-27 21:19:12 · 287 阅读 · 0 评论 -
洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)
题目链接:点击查看题目大意:给出一棵 n 个点组成的有根树,再给出 m 次询问,每次询问需要回答点 x 和点 y 的 lca题目分析:今天新学了两种蛮有意思的求 LCA 的方法,总结一下四种方法各有利弊吧,实现复杂度参考我自己,如果有代码大佬能闭着眼随便写的话,忽略即可 Orz树上倍增求LCA:时间复杂度: 预处理:O( nlogn ) 查询:O( logn ) 空间复杂度:O( nlogn ) 实现复杂度:最简单树链剖分求LCA:时间复杂度: 预处理:O( n )原创 2020-10-27 18:20:09 · 317 阅读 · 0 评论 -
洛谷 - P2944 [USACO09MAR]Earthquake Damage 2 G(最小割)
题目连接:点击查看题目大意:给出一个 p个点 c条边的无向图,设置点 1 为基地,现在有 n 个点表示自己没有被摧毁,但无法与基地相连,现在问最少摧毁多少个点可以使得满足条件题目分析:最小割,割的是点,所以考虑拆点限流:源点 -> 点 1,流量为 inf 不能被摧毁的点:入点 -> 出点,流量为 inf 可以被摧毁的点:入点 -> 出点,流量为 1 n 个点的出点 -> 汇点,流量为 inf跑最大流最小割就是答案了需要注意的就是,p 是图中节点的个数吧,写..原创 2020-10-16 22:32:45 · 218 阅读 · 0 评论 -
洛谷 - P2472 [SCOI2007]蜥蜴(最大流)
题目链接:点击查看题目大意:给出一个 n * m 的迷宫,每个位置都有一个耐久度,也就是至多经过 a[ i ][ j ] 位置 ( i , j),现在迷宫中有一些蜥蜴,每一时刻在每一个位置至多有一个蜥蜴,每只蜥蜴每次可以跳到欧几里得距离不超过 d 的格子中,迷宫的边界即为出口,问最少有多少只蜥蜴无法逃出迷宫题目分析:遇事不决刷刷水题。。总感觉这道题很久很久以前做过一次,可能是在梦里做的吧最少有多少只蜥蜴无法逃出 -> 最多能逃出多少只蜥蜴每个位置都有容量,所以拆点限流所以随便搞搞.原创 2020-10-16 22:17:03 · 233 阅读 · 0 评论 -
中石油训练赛 - Trading Cards(最大权闭合子图)
题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化题目分析:最大权闭合子图的模板题。。感觉亏死了,训练的时候三个英语不好的人根本不会主动去读题,只能被动跟着榜慢慢耗,结果这样一道本应该被秒掉的题目只能赛后看别人翻译的题意再补了相对于传统的模型,多了一项就是卡片也是可以售出的,又因为售出和购买的价格都是相同的,所以不妨假设初始时就将所有的卡片售出,这样问题就转换成模板题了。。建图..原创 2020-10-10 22:12:45 · 839 阅读 · 0 评论 -
SPOJ - OPTM Optimal Marks(进制拆分+最小割)
题目链接:点击查看题目大意:给出一个由 n 个点和 m 条边组成的图,有 k 个点初始时就有权值 w[ i ],现在问如何给剩下的节点赋值,使得整张图的总权值和最小,每条边的权值为:w( u , v ) = w[ u ] xor w[ v ]题目分析:因为异或运算属于位运算,所以对于每一位来说其贡献都是相互独立的,可以分开之后分别计算这样问题就转换成了,对于那些未赋值的位置来说,选择 0 或 1 将其赋值,因为每个位置的取值只有两种选择,又是一种最优性问题,不难想到最小割建图思路也比较简单:原创 2020-10-08 20:26:31 · 243 阅读 · 0 评论 -
AOJ - 邻家割草(最小割)
题目链接:点击查看题目大意:题目分析:因为每个方格只有两种状态,所以考虑最小割,初始时为 ' . ' 的与源点相连,初始时为 ' # ' 的与汇点相连再考虑如何维护贡献,因为割草机方向一定,所以每个点只可能与其左边的点和下边的点的取值有关系,如果取值不同的话赋值为 a,如果取值相同的话赋值为 0,综合考虑下建图方式如下:源点 -> 每个 ' . ' ,流量为 b 每个点和其左边的点以及下边的点: 如果相同,连接一条权值为 a 的无向边 如果不同,从 ' . ' 向 ' #原创 2020-11-22 18:49:51 · 1907 阅读 · 4 评论 -
ZOJ - 2676 Network Wars(01分数规划+最小割)
题目链接:点击查看题目大意:给出一个 n 个点和 m 条边组成的无向带权图,现在需要求一个将点 1 和点 n 分开的割集 C ,使得最小题目分析:分数式为总权值比上边的数量,换句话说就是一条边只有选或不选两种状态,所以可以用 01 规划转换题意:,这样就转换成了 01 分数规划的题目,构造新函数 g 为:,令边权,则原式变为,即转换为了求原图的最小割,这样外层套一个二分,二分内部的 check 用最小割来实现即可关于最后的路径输出,只需要 dfs 一下将整张图分为两个部分即可还需要注..原创 2020-10-04 11:26:20 · 240 阅读 · 0 评论 -
CodeForces - 1408E Avoid Rainbow Cycles(思维+最大生成树)
题目链接:点击查看题目大意:给出 m 个集合,每个集合中都有数个点,每个点的取值范围为 [ 1 , n ] ,对于每个集合而言,其中的点互相连边,边的颜色为其集合的编号,每次操作可以删除点,删除掉第 i 个集合中的点 j 的代价为 a[ i ] + b[ j ] ,现在规定 “彩虹环” 的定义为,一条环上的所有边的编号互不相同,现在问最少花费多少边权进行删点才能使得图中不存在 “彩虹环”题目分析:模型的话很像之前训练的时候做过的一个最短路,也是好多个集合,每个集合中的点互相连边:HDU - 5521原创 2020-10-03 11:14:53 · 356 阅读 · 0 评论 -
中石油训练赛 - Plan B(点双缩点+树形dp)
题目大意:给出一张 n 个点 m 条边的无向连通图,现在有某些点被标记了,问能否通过删除某个未被标记的点,使得删除该点后的数个互不相交的连通块中,至少存在一个联通块中不含有被标记的点题目分析:首先不难看出,被删掉的点一定是割点,所以我们可以直接用 tarjan 求出割点,然后点双缩一下点,将整个图缩成一棵树,在树上dp即可代码://#pragma GCC optimize(2)//#pragma GCC optimize("Ofast","inline","-ffast-math")...原创 2020-09-30 11:34:32 · 260 阅读 · 0 评论