![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ACM_图论
文章平均质量分 64
比较基础的有:最短路,最小生成树,拓扑排序,最近公共祖先,树形DP等。稍微复杂的有:网络流等。
I_have_a_world
这个作者很懒,什么都没留下…
展开
-
Escape HDU - 3605 (状态压缩+ISPA/Dinic+建图)
传送门题意:给定n个人,m个星球,每个人只能到特定的星球,每个星球只能容纳 ci 个人。求是否所有人都可以被容纳。n<=1e5,m<=10。 先输入n,m。然后n*m矩阵,aij表示第 i 个人是否可以到 j 星球。 最后一行 m个数字表示ci。 输出"YES" or “NO"。题解:参考大佬博客HDU - 3605 Escape 状态压缩最大流1.直接建图s->人->星球->t 一定会爆2.考虑状态压缩:每个人可以到达的星球的情况为一个状态,最多.原创 2021-05-06 15:52:39 · 91 阅读 · 0 评论 -
Sabotage UVA - 10480 (最小割+求最小割去掉的具体边+ISAP)
传送门题意:给定n个点,m条带权无向边,源点s=1,汇点t=2。去掉一些边之后使s,t不连通,求去掉的这些边(而且还要满足去掉的边权和是所有答案中最小的——最小割)。n<=50,m<=500,边权<=4e7(可能超int) 无重边 有多个答案输出一个,边按两个点的方式输入(不需要按顺序)题解:求最小割去掉的具体的边先正常求最大流(增广路算法EK,Dinic,ISAP等都行)。 最后dfs/bfs最后的残余网络,vis数组分成两块,一块与s相连,一块与t相连,最后边中两点原创 2021-05-04 23:36:13 · 143 阅读 · 0 评论 -
Minimum Cost POJ - 2516 (费用流+EK+模板+分别建图)
传送门题意:n个商店,m个供货商,共k种商品。n个商店需要一定数量的每种商品,m个商店有一定数量的每种商品,m个商店送每一种商品到n个商店都有一定的单价。问是否能供满货,如果能输出最小费用,如果不能,输出-1。n,m,k<=50,数量值都在0~3,费用值都在0~100 输入:多组输入 n,m,k n行,每行k个数,ai,j 表示第 i 个商店需要商品 j 的数量(0~3) m行,每行k个数,ai,j 表示第 i 个供货点有商品j 的数量(0~3) k个n*m矩阵,ci..原创 2021-05-07 21:49:33 · 82 阅读 · 0 评论 -
Control HDU - 4289 (最小割+拆点+ISAP)
传送门题意:给定n个点,m条无向边(边上的两个点之间可以通行),问最少去掉哪几个点会使s,t之间不连通。干掉哪几个点,会使敌人在s的武器送不到t。干掉t也表示送不到。 2<=N<=200,1<=m<=2e4 1<=s,t<=N(没说s是否可以等于t。可以的话干掉t即可)题解:就是个拆点+建图+ISAP模板emm(ps:之前某博主说这题卡ISAP,Dinic可以过,我差点信了emm。请相信ISAP较之Dinic的优越性!!)代码:#include <algorithm>原创 2021-05-04 16:23:18 · 80 阅读 · 0 评论 -
Going Home POJ - 2195 (费用流的使用场景+费用流模板题+建图)
传送门题意:给定一个n*m的矩阵,其中有相等数量的人和房子,每走一个格子花费¥1,最终每个人进入一个房子,问最少花费多少。n,m,人/房子的数量<=100 每个格子上可以站任意个人,包括房子(但是只能进入一个人)。 输入: 多组;n m;n*m的矩阵——'.'表示空格,'H'表示房子,'m'表示人 输出:一个数,表示费用题解:费用流。开始认为可以是最小割,想了想还是不对:代码:#include <algorithm>#include <原创 2021-05-09 09:23:48 · 131 阅读 · 0 评论 -
Island Transport HDU - 4280 ( 最大流+ISAP+gap优化+无向边 )
传送门题意:给定n个坐标点,m条无向边(权值表示一次运送的人——即流量)。问从x最小的坐标到x最大的坐标的最大流量。2<=n,m<=1e5。 (好像)没有说x最大、小的点的数量(弄个超级源汇点即可)题解:要卡Dinic,那就用ISAP(一般来说,看到数据大就用ISAP,不然就试试Dinic——最好直接切换HLPP)建图注意增加反向边的意义在于增加反向边本身,而不是非要弄个add(v,u,0)。这里本身就是双向边,就不用add(v,u,0)了(唯一的意义就是增加复杂度)。 听原创 2021-05-04 15:07:26 · 312 阅读 · 0 评论 -
A Plug for UNIX POJ - 1087 (读题的技巧+建图+Dinic+建图标点的技巧)
目录关于读题:关于建图标点:传送门题意:一间房间有n个插座,有m个电器要使用一些插座(有的插座没在n个里面),有k个转换器,每个转换器可以插在相应的插座或者转换器上(插上之后相当于插座变成另一种插座),每个转换器上可以插相应的插头或者转换器(转换器可以当作插头看待)。要求尽可能多的插头能充电,问最少有多少电器充不上点。n,m,k<=100 插座,插头都有不超过24位的字符串表示 n个插座各不一样(题目好像没有明显说) 转换器的种类无穷多 输入:n->n个插座->m->m原创 2021-05-07 17:16:47 · 77 阅读 · 0 评论 -
Food HDU - 4292 (拆点+Dinic)
传送门题意n个人,F种食物,D种饮料,每种食物,饮料的数量都已知,同时还知道哪个人喜欢吃/喝那些食物/饮料。最多多少人能够有吃有喝。1<=n,F,D<=200。 输入:多组输入n,F,D F个整数表示食物i的数量 D个整数表示饮料i的数量 n*F矩阵,aij为'Y','D'分别表示第i个人喜欢/不喜欢食物j n*D矩阵,bij为'Y','D'分别表示第i个人喜欢/不喜欢饮料j输出:一行一个整数表示人数题解网络流,建图难。s->食物->人_in->人_out->饮料->原创 2021-05-10 20:27:32 · 63 阅读 · 0 评论 -
codeforces 1428B. Belted Rooms(图论,思维)
题目链接:https://codeforces.ml/contest/1428/problem/B题意:T组数据。n和一个长度为n的字符串s(只含><-)(表示一个环,从0开始)。><-表示顺逆和双向。问有多少个点既可以出去,而且出去之后回得来。题解:mad,心态又炸了,队友太强了,,,,,。赛场上的不冷静思考:a[i],b[i]分别为出度和入度。讨论,如果存在a[i]=0|b[i]=0,那么就是只有双向两边满足。否则就是n。冷静思考:如果即存在>,又存原创 2020-10-18 08:38:36 · 483 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题六:最小生成树(MST)
系统学习总结最小生成树...原创 2021-04-07 14:51:36 · 156 阅读 · 0 评论 -
cf1513.D. GCD and MST
传送门题意:给定一个长度为n(n<=2e5)的数组a(1<=ai<=1e9)。i>=1&&i<=n-1时有连线i~(i+1),长度为p.除此之外,如果i~j有gcd(ai,ai+1,...,aj)==min(ai,ai+1,...,aj)那么有连线i~j,长度为min(ai,ai+1,...,aj)。求最小生成树的总路径长度。题解:先对a进行排序,然后从小到大枚举,向两边拓展长度可以为枚举的这个点的值的线段。注意如果已经连接,那么跳过枚举这个点,因为原创 2021-04-12 13:13:22 · 308 阅读 · 0 评论 -
codeforces D. Bandit in a City
题目链接:https://codeforces.ml/contest/1436/problem/D题意:最开始强盗在1,然后1可以到每个点(n-1条单边),每个点最开始有ai个人.人可以沿着路径向下跑,问强盗最终最少可以追到多少个人(强盗和人都很聪明)。题解:dfs一遍sum[i]表示每个节点为根节点的子树的总权,zs[i]表示以该节点为根的子树有多少个叶子。最终只需要求出最大的sum[i]/zs[i]+(sum[i]%zs[i])?0:1;就ok了。代码:#include <b原创 2020-10-25 08:46:25 · 513 阅读 · 1 评论 -
2021牛客寒假算法基础集训营1 C红与蓝(匹配问题)
题目链接:https://ac.nowcoder.com/acm/contest/9981/C题解:度为1,则一定和直接相连的抱团组队,比如i-j,du[i]=1,那么i,j组队,j也必须和其他的断绝联系(断绝联系之后du[k]为1就加入)。总之,如果满足,一定两两组队。且组队问题,思考方向:先从选择较少的开始匹配。组好队之后直接dfs一下就好了。代码:#include <bits/stdc++.h>#define ll long long#define pi aco原创 2021-03-06 17:13:09 · 347 阅读 · 0 评论 -
Dining POJ - 3281 (建图+最大流模板+Dinic)
传送门题意:n(<=100)头牛,F(<=100)种食物,D(<=100)种饮料。每头牛有想吃的食物和想喝的饮料,但是每头牛最多只能吃一种,喝也最多能喝一种,而且每种吃、喝的只能被一头牛吃、喝。求最多有多少头牛能够既有吃的又有喝的。题解:难点还是在建图,除此之外Dinic全搞定。自己想了一会,想了个假图。以下图来源:POJ3281 Dining——最大流(Dinic+建图⭐)源点->吃的->牛->牛->喝的->汇点。(我的小脑袋,还是不原创 2021-05-03 14:29:51 · 165 阅读 · 0 评论 -
luogu P4017 最大食物链计数(DP,拓朴排序,食物网食物链数)
题目链接:https://www.luogu.com.cn/problem/P4017题意:给定n,m(n<=5000,m<=500000),然后m行每行两个整数a,b(b吃a),最后要求输出总的最长食物链(最左边为最高消费者,最右边为生产者)条数取mod题解:拓扑排序不难想,但是这里面坑还是不少的(反正我被坑了)。。。dp[i]为%mod之后的值,所以不能单纯的求mod的最大值。事实上只需要将所有的out[i]即出度为0的点的dp值加上取模就好了(唉,难道这就是我无脑取最大值太多的原创 2020-10-27 20:45:01 · 275 阅读 · 0 评论 -
ACM Computer Factory POJ - 3436 (最大流+建图+Dinic+点权与边权之间的转换)
目录传送门点权转化为边权传送门题意:题意迷得很,最后也是看网友的才看懂。每台计算机有p(<=10)个零件,一个公司有n(<=50)个工厂。每个工厂加工一些半成品,输入(得到)一些指定的零件,最多能够输出指定套(指定的是总输出上限,最多不能输出输入套)指定的文件。n行,第 i 行第一个值是第 i 个工厂的总输出的上限,然后是p个数表示输入的零件,0表示一定不能有该零件,1表示一定要有该零件,2表示无所谓,接着是输出的零件,0表示有该零件,1表示没有。题解:建图(点权转化原创 2021-05-02 21:17:07 · 321 阅读 · 0 评论 -
1454cfE. Number of Simple Paths(图论,简单路径数,判环)
题目链接:https://codeforces.ml/contest/1454/problem/E题意:给定n条边(3<=n<=1e5),能连接所有点,问总共有多少条简单路径,1->2->3,3->2->1算一条。任意两点之间最多只有一条边,且无自环。题解:n-1条能将所有点连完,总共n条边,那么恰好有一个环。首先任意两点的一条简单路径共:1,...,n-1的和。然后环间(环的点数为sum):1,...,sum-1。(sum>=3)环外一点到环上原创 2020-11-25 19:30:51 · 404 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题四:最短路练习
最短路知识复习&总结(全)Til the Cows Come Home POJ - 2387 :模板题,脑瘫题(题都没说清楚)。1.邻接表要判重,vector不用判重。原创 2021-04-22 16:12:34 · 171 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题十一:网络流
写在前面开始时间2021-04-27,结束时间未知。怕又是一周的高效学习,然后又是乏了颓废一周。。。那就一周搞完这一专题,发出咯咯的笑声。1.从未接触过,听说很难emmm。原创 2021-04-27 19:27:03 · 209 阅读 · 0 评论 -
cf1566E. Buds Re-hanging(图论&dfs删除满足条件的点)
总结收获1. 这种有很多很多操作,求最终状态的问题:先通过一些操作把它转化为最最最基本的形式(不用考虑操作,只需要考虑它的**最基本的形式**)。2. dfs删除满足条件的点。==这个需要对树的结构有很清晰的认识,同时需要在赛场上的思维灰常清晰!!!==题目E. Buds Re-hanging题意:一棵树,树的芽满足以下条件,每次可以剪掉一棵芽(去掉芽和它的父亲中间的边)放在其他任意节点上,求任意次操作之后叶子节点的数目的最小值。芽的定义:不是根不是叶子节点所有节点均为叶子节点原创 2021-09-15 21:28:33 · 237 阅读 · 0 评论 -
Power Network POJ - 1459 (网络流+建图+读题+scanf同时输入字符和数字)
传送门题意:没读懂,大意好像是n个点,m条有向边,np条从源点汇入,nc条汇出到汇点。然后求最大流。这个专题最后两个题了,没得之前有耐心了,读题真难受,原来没有读题的压力一题可以这么快emm。题解参考博客POJ - 1459 Power Network 最大流模版,有点意思的输入题解:读懂题->建图->Dinic模板代码:scanf同时输入字符和数字#include <algorithm>#include <cstdio>#include原创 2021-05-13 08:57:11 · 119 阅读 · 0 评论 -
最小生成树复习&总结
目录前言一、前置知识——并查集模板拓展维护并查集大小:简单的很,在merge的时候操作就ok了按秩优化:虽然没啥用,但最好知道原理二、基础算法1.克鲁斯卡尔:加n-1条边2.prim:加n-1个点(不算第一个点)3.Boruvka算法(结合prim与克鲁斯卡尔)三、最小生成森林四、判断最小生成树的唯一性解决方法1:求非严格次小生成树看是否和最小生成树相等,如果不相等那么就唯一解决方法2:如果在选一个点加进来的时候,有两条及以上的路径可以选择,那么这个最小生成树就就是不唯一的五、瓶颈生成树六、次小生成树(严格原创 2021-11-12 14:19:30 · 574 阅读 · 0 评论 -
网络流基础知识学习(初级)
目录前言一、网络流基础概念二、网络流中的常见问题(最大流,最小割,费用流)三、最大流:Ford-Fulkerson 增广路算法:该方法通过寻找增广路来更新最大流,有 EK,dinic,SAP,ISAP 主流算法Edmond-Karp 动能算法(EK 算法)矩阵实现模板链式前向星实现模板Dinic算法Dinic模板(应该是最长用到到的,比ISAP慢不了多少)ISAPISAP模板(终于进入正题了?&比Dinic快的板子)& HLPP(Push-Relabel 预流推进算法)四、最小割[UVA16原创 2021-11-12 15:18:02 · 1084 阅读 · 0 评论 -
Marriage Match IV HDU - 3416 (最短路+最大流)
传送门题意:给定n个点,m条边,还有起点s,终点t。每条边(a,b,c)表示a到b,权值为c。每条边只能够经过一次,只能走最短路,问s到t最后可以选择多少条路。n<=1000,m<=1e5,0<c<=1000。 可能a=b,多条a->b 注意可能题意有点歧义,并不是求最短路径数。而是求最大流,每条边容量为1,只能走为最短路上的边。题解:错把c当作边权,竟然还过了样例emm。后面以为和MCMF的操作超不多,但是发现不知道怎么“反悔”(不知道怎么设置反向边原创 2021-05-12 09:08:10 · 127 阅读 · 0 评论 -
模板一:图论
目录个人ACM模板总结一、图论(一)链式前向星(二)最短路1.单源最短路1)dijkstra算法2)SPFA2.多源最短路1)Floyd3.传递闭包4.最短路径树1)最短路径树计数2)去掉图中一条边之后最短路径树大小(dis之和)是否有变化5.最短路计数6.分层图最短路7.k短路写在最后(三)最小生成树1.基础算法:1)克鲁斯卡尔:加n-1条边2)prim:加n-1个点(不算第一个点)3)Boruvka算法(结合prim原创 2021-05-27 17:27:09 · 520 阅读 · 0 评论 -
网络流基础知识学习(初级)——现场赛替代版
1.g++输出全用%f题目:poj3675,poj2986原创 2021-03-17 08:30:52 · 161 阅读 · 0 评论 -
暑期培训小测A题-POJ3687(拓扑排序+贪心+贪心+贪心+逆向思维)
总结收获拓扑排序,某时刻度相同的点怎么先出队也是个值得考察的问题。题目传送门3. 题意:有n个球,重量都不一样,同时有m个约束(a,b)表示a的重量要小于b。1.1 n<=200,m<=40000,问是否有重量序列满足条件,如果有字典序最小的情况。4. 题解:2.1 首先分析,如果知识输出任意满足条件的情况,随便拓扑排序判一下环就ok了。但是这里要满足字典序最小。2.2 很直接的,我们可以想到从1到n,逐个优先考虑,但是这样太麻烦了。。。2.3 我们发现有一些球的重量是相原创 2021-07-23 09:37:24 · 86 阅读 · 0 评论 -
最短路与环学习&总结
目录前言单源最短路dijkstra算法堆优化模板(时间复杂度O(mlogm)O(m\log m)O(mlogm))(找最小的dis以及其下标)SPFA模板(放入队列中的同时vis[s]=1,取出的同时vis[now]=0,更新所有可以更新的,更新的时候放入所有能放入的即vis[x]=0的x)全源最短路Floyd模板(无脑三重循环)三、传递闭包模板四、最短路径树(应用)最短路径树计数模板(最短路计数模板题):去掉途中一条边之后最短路径树大小(dis之和)是否有变化暂时就以上两个应用吧,毕竟自己没遇到过五、最原创 2021-10-22 13:21:58 · 390 阅读 · 0 评论 -
Leapin‘ Lizards HDU - 2732 (拆点+网络流模板题+建图)
传送门题意:一个n*m迷宫中,有一些Lizard(????)和柱子,每个柱子最多可以跳x次(0~3),求最多有多少只Lizard可以跳出迷宫。输入T<=25表示样例组数 每组由n ,d(1~20)开始,n表示行数,d表示可以跳的最远的曼哈顿距离(题目貌似没说) 一个n*m矩阵,aij表示珠子可以跳多少次 一个n*m矩阵,bij==‘L'表示这个地方最开始有Lizard输出:最少多少只不能跳出迷宫题解:网络流=建图难。ps:很快写好之后找了一个半小时的BUGe原创 2021-05-11 15:31:37 · 97 阅读 · 0 评论 -
Kakuro Extension HDU - 3338 (毒瘤+MLE+网络流+数独)
传送门先说注意:MLE不止与空间有关,还与时间有关的样子。这里M太大就MLE了emm,还一直不知道错在哪里emm. 尽量使用for而不是memset初始化(说的时限制严格的情况下) 其实不必特别注意,只需要知道MLE问题出现在哪儿即可。题意:n*m的方格。填数——类似数独规则,懂的都懂。n,m<=100 只能填数1~9题解:最大流。s->黑横->白->黑竖->t代码:#include <algorithm>#in原创 2021-05-12 12:07:31 · 144 阅读 · 0 评论 -
【树的欧拉序列应用】学习&总结
目录前言前言参考博客:oi-wiki原创 2021-10-06 19:41:55 · 217 阅读 · 0 评论