
图论
EnjoyingAC
bugger,写bug爱好者。
展开
-
迷宫寻路(BFS、Java实现)
题目假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径。迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,只有先拿到钥匙才能打开门。请设计一个算法,帮助探险家找到脱困的最短路径。如前所述,迷宫是通过一个二维矩阵表示的,每个元素的值的含义如下 0-墙,1-路,2-探险家的起始位置,3-迷宫的出口,...原创 2019-03-07 08:22:15 · 2372 阅读 · 0 评论 -
HDU2717 Catch That Cow(BFS || 最短路解法,SPFA版)
题意起点在N,终点在K。每个点u有三条有向边u–>u-1,u–>u+1,u–>u+u.每条边的权值为1.求N到K的最短路。解题一种方法是BFS。以N为根,每个点有三个子节点。因为每条边的权值都是1,所以第一次广度搜索到K的时间就是答案。另一种解法是最短路。求N到K的单源最短路即可。AC代码//93ms 2.9MB#include <cstdio...原创 2018-06-19 10:09:55 · 216 阅读 · 0 评论 -
POJ2289 Jamie's Contact Groups(二分图多重匹配+二分枚举)
题目链接http://poj.org/problem?id=2289题意杰米是一个非常受欢迎的女孩,拥有不少朋友,所以她总是在她的手机中保留一个很长的联系人列表。联系人列表变得如此之长以致于她通常需要很长时间才能浏览整个列表以找到朋友的号码。作为杰米最好的朋友和编程天才,你建议她将联系人列表分组,并且最大限度地减少最大组的人数,这样她可以更容易地在组中搜索朋友的号码。杰米接受你...原创 2018-06-10 15:56:17 · 558 阅读 · 0 评论 -
UVA10480 Sabotage (Dinic版最小割边集)
读题给定n和m,n表示点的数量,m表示边的数量。 再给m条边(u,v,w)。w表示割点该边的花费。注意是无向图,反向边的容量与正向边一致。将结点1看作源点,结点2看作汇点,求一组最小割边集。解题最小割等于最大流。如果“一条边满流”和“去掉该边后网络的最大流减小的量等于该边的容量”两个条件同时满足,那么该边就是最小割边集的一条边。 故在跑一遍dinic算法后,在残量网络中,将源点S能...原创 2018-06-09 15:08:11 · 651 阅读 · 0 评论 -
求流网络的一组最小割边集
算法说明跑一遍dinic算法求出最大流后。在残量网络中,容量大于0表示可以走。 将从源点出发可以到达的点看作S集,剩下的看作T集。如果边(u,v)满足u属于S集,v属于T集,那么该边就是最小割边集中的边。而确定S集和边集可以通过一次DFS或BFS标记得到。例题UVA-10480 Sabotage AC代码//跑一遍dinic算法后,//在残量网络中,从源点出发能到...原创 2018-06-09 14:58:31 · 1102 阅读 · 0 评论 -
HDU2732 Leapin' Lizards(结点容量模型)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2732读题给定一个n和d。n表示地图的行数,d表示蜥蜴的最大跳跃距离。注意,一次跳跃是进行曼哈顿跳跃,即与当前格子的曼哈顿距离小于等于d的格子蜥蜴都可以一次跳到(一开始读成了只能上、下、左、右跳,发现与样例4不符)。 给定一个n*m的数字矩阵(m未知,需自己求)。表示某个格子最多只能跳出蜥蜴...原创 2018-06-09 11:44:53 · 168 阅读 · 0 评论 -
HDU3605 Escape(缩点+二进制+最大流)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3605读题给定n个人和m个星球。 通过一个n*m矩阵来描述某人是否适合生存在某星球。 通过一行m个数组来标是每个星球的最大容纳量。 求能否满足每个人都被安排到其适合居住的星球。解题人与星球进行匹配,星球有最大容纳量。明显的二分图多重匹配模型。 用匈牙利算法可解。 而用最大流解...原创 2018-06-08 22:32:53 · 178 阅读 · 0 评论 -
HDU4289 Control (破坏结点使不存在可行流)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4289读题给定一个无向图。 一个罪犯要从城市S逃到城市T,为了逮捕罪犯,需要在某些城市设立观察点,罪犯逃到观察点所在的城市就会被逮捕。设立观察点是需要钱的,求最少需花费多少钱在设立观察点上才能万无一失的逮捕罪犯。解题罪犯从S逃到T的路线可以看作是一个S到T的可行流。设立观察点相当...原创 2018-06-08 19:23:37 · 161 阅读 · 0 评论 -
HDU4292 Food(结点容量模型+多源多汇模型)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4292读题给定N个人、F种食物、M种饮料以及每种食物数量、每种饮料数量。 通过一个N*F的矩阵给出某个人是否接受某种食物。 再通过一个N*M矩阵给出某个人是否接受某种饮料。 顾客的要求是同时有饮料和食物(即其接受的饮料至少提供一瓶,接受的食物至少提供一份)。 求最多能满足多少位顾客。...原创 2018-06-08 17:14:43 · 249 阅读 · 0 评论 -
HDU2102 A计划(BFS)
解题比较坑的就是讨论从本格子向另一层走还是本层左右上下移动。并不是所有从队列出来的格子都能进行上下左右移动的,只有非‘#’格子才能。注意这一点后,就是一个常规的BFS了。AC代码#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>...原创 2018-06-22 17:19:38 · 246 阅读 · 0 评论 -
HDU4280 Island Transport (无向图Dinic算法+当前弧优化)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4280读题给定一个无向图,求从最左侧的点到最右侧的点的最大流。解题无向图的最大流与有向图的最大流的区别在于反向边的流量不是零而是与正向边相等。注意这点之后,再打一个Dinic算法模板。考虑到数据特别地大,需要进行当前弧优化。即在每一次找增广路前进行:while(bfs()) ...原创 2018-06-08 08:58:05 · 588 阅读 · 1 评论 -
HDU - 2181 哈密顿绕行世界问题 (DFS并用数组记录路径)
解题这题DFS比BFS好写很多。 共用一个vis数组来标记已走过的城市,ans记录第i个走过的城市。 根据DFS的深度来进行判断是否递归到终点。AC代码//0ms 1.8MB#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>...原创 2018-06-22 15:53:01 · 180 阅读 · 0 评论 -
POJ2516 Minimum Cost(SPFA费用流 && 将稠密大图拆成多个小图以加速)
题目链接http://poj.org/problem?id=2516题意感觉网络流的题目意思都挺难理解的。 有N个商店,每个商店都有K种相同物品,现要从M个供应商进货,问能否满足所有商店的进货要求,如果满足输出最小费用,否则输出-1.输入如下: 第一行是N M K. 一个N*K矩阵,a[i][j]表示第i号店进第j种物品的数量。 一个M*K矩阵,b[i][j]表示第i号仓库...原创 2018-06-07 16:23:19 · 194 阅读 · 0 评论 -
POJ2195 Going Home (费用流SPFA版 || 二分图最大权匹配)
题目链接http://poj.org/problem?id=2195题意给定n个人和n个房子,每个房子只能住一个人(但可以停留若干人)。 给定一个N*M的矩阵,‘H’表示房子,’m‘表示人,’.’表示空地。每个人可以往上、下、左、右四个方向走,走一步的费用是1.求每个人都找到一个房子住下的最少花费。分析一个人匹配一个房子,联系到二分图最大权匹配。权值为人到房子的花费,即曼哈顿...原创 2018-06-07 12:43:44 · 235 阅读 · 0 评论 -
POJ1087 A Plug for UNIX
题目链接http://poj.org/problem?id=1087题目You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate t...原创 2018-06-07 09:06:22 · 155 阅读 · 0 评论 -
POJ3281 Dining (结点容量模型)
题目链接http://poj.org/problem?id=3281题目Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others.Farmer John has cooked fabulous meals f...原创 2018-06-06 19:28:24 · 220 阅读 · 0 评论 -
ZOJ3195 Design the city (tarjan版LCA求树上三点最短距离)
题意给定一个带边权的无根树,求任意三点的最短距离。解题设d[u]为节点u到根的距离。 树上任意两点的最短距离为:d[u]+d[v]-2*d[lca]. lca为u和v的最近公共祖先。 将求三点距离转化为求两点距离,容易得到: x、y、z三点最短距离=(x和y的最短距离+x和z的最短距离+y和z的最短距离)/ 2.AC代码//100ms 11.6MB#include...原创 2018-06-13 09:36:01 · 324 阅读 · 0 评论 -
HDU4547 CD操作(tarjan版LCA+比较裸的LCA)
题目在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录。 这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式: 1. CD 当前目录名…\目标目录名 (中间可以包含若干目录,保证目标目录通过绝对路径可达) 2. CD .. (返回当前目录的上级目录) 现在给...原创 2018-06-13 08:39:43 · 230 阅读 · 0 评论 -
HUD1241 Oil Deposits (DFS的应用)
题意GeoSurvComp地质调查公司负责探测地下石油储藏。 GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块。他们通过专业设备,来分析每个小块中是否蕴藏石油。如果这些蕴藏石油的小方格相邻,那么他们被认为是同一油藏的一部分。在这块矩形区域,可能有很多油藏。你的任务是确定有多少不同的油藏。Input 输入可能有多个矩形区域(即可能有多组测试)。每个矩形区域的起...原创 2018-06-19 21:34:13 · 135 阅读 · 0 评论 -
FZU2298 Traffic jam(SPFA最短路)
题目链接http://acm.fzu.edu.cn/problem.php?pid=2298题意给定n个点,m条边。 每个点有一个权值,表示从该点离开必须满足在该点的时刻在范围[0,ai),[2*ai,3*ai),…,[2k*ai,(2k+1)*ai). 求从s点到t点的最短时间。解题以时间为距离指标,求s到t的最短路即可。 注意在点u可能需要停留一段时间。这段时间应累加...原创 2018-06-19 21:44:09 · 451 阅读 · 0 评论 -
六一儿童节(二分图最大匹配,Java实现)
题目六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。输入描述:第一行:n,表示h数组元素个数第二行:n个h数组元素...原创 2019-03-06 15:23:31 · 507 阅读 · 0 评论 -
51nod 1737 配对 (贡献、贪心、树形dp)
题目链接https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1737题意给出一棵n个点的树,将这n个点两两配对,求所有可行的方案中配对两点间的距离的总和最大为多少。题解先随便选个点作为根,将无根树变成有根树。 将边权对应到点权(边u-v的权值对应到v)。距离总和大小是根据每条边贡献的次数来计算的,故...原创 2018-09-07 10:45:48 · 318 阅读 · 0 评论 -
Codeforces 1037D Valid BFS? (BFS、STL)
题目链接http://codeforces.com/contest/1037/problem/D题意给定n和n-1条边,即一个树图。 然后给定一个BFS序列。 问该BFS序列是否可以从结点1开始进行BFS得到。题解模拟给定的BFS序列看是否合法。初始将结点1放入队列。 从队列中取出结点u,找出与u邻接的且未被访问过的所有vi结点并放入tmp数组中。 求出tmp数组的...原创 2018-09-03 17:29:36 · 739 阅读 · 2 评论 -
51nod 1076 2条不相交的路径 边双连通分量、桥
题目链接https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1076题意给出一个无向图G的顶点V和边E。进行Q次查询,查询从G的某个顶点V[s]到另一个顶点V[t],是否存在2条不相交的路径。(两条路径不经过相同的边) (注,无向图中不存在重边,也就是说确定起点和终点,他们之间最多只有1条路)题解要想从...原创 2018-09-05 11:09:37 · 200 阅读 · 0 评论 -
HDU 1520 Anniversary party 树上最大权独立集 DP
题意N个人,每个人都有自己的权值。N-1条边u v(题目说是若干条边,以0 0结尾,但是其实就是N-1条边)表示u是v的直接主管。 选若干个人,要求这些人的权值和最大且没有其直接主管或直接下属同时在。题解以1为根建一个有根树,确定每个结点的深度和其子结点。如果选了u结点,那么u结点的子结点一定不能选。如果没有选u结点,其子结点v可以选也可以不选。设dp[u][0]表示不选u结...原创 2018-08-09 12:30:19 · 265 阅读 · 0 评论 -
2018多校赛第三场 hdu6324 Grab The Tree(分奇偶层)
题意给定一个树,树上每个结点都有一个权值。Q和T进行抢占结点游戏,同一个人抢占的结点不能相邻(没有直接相连的边)。最后得到的值是所有抢占到的结点权值的异或和。Q先手,谁得到的值大,谁赢,一样大则平局。解题将树dfs一次,变成一个有根树(随便给一个根)。确定每一个结点的深度。假设Q选了根结点,那么第二层结点Q都不能选,所以第二层结点都会被T选。同理,第三层结点都属于S。… 这样,求...原创 2018-07-31 11:17:21 · 233 阅读 · 0 评论 -
POJ 2987 Firing (最大权闭合子图)
题意公司需要裁员。有n个员工作为被裁获选人,裁掉第i个人会获得价值w[i].但是裁掉x之前,需要先裁掉x的直属上司y。求裁掉几个人获得价值最大,最大价值是多少。解题根据题意,x与y的依赖关系,所裁掉的人一定是一个闭合子图。即图中出边所指向的点仍然在图中。 所以,这是一个最大权闭合子图问题。 建图跑一遍最大流求出最大权。 然后从源点S进行dfs,dfs能进行的次数就是闭合子图中点的...原创 2018-07-30 19:24:30 · 220 阅读 · 0 评论 -
UVALive 8136 Make a Forest (思维)
题意给定N个三元组(ui,vi,wi),要求你建造一个树的数量最少的森林。对森林的要求如下: (1)每个树是个有根树 (2)父边的边权比儿子边的边权小 (3)每个结点最多有m个儿子结点 (4)森林应恰好有N条边 输出最小的树的数量即可。解题对N条边按照边权升序排序。按照排好序后的边去遍历边,每次尝试将边(u,v)接到u结点的下面。为了满足第三个要求,用mp[u]表示u结点下还...原创 2018-08-03 19:56:17 · 326 阅读 · 0 评论 -
HDU 1428 漫步校园(spfa最短路+记忆化搜索)
题目LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划分为n*n个小方格,代表各个区域。例如LL居住的18号宿舍位于校园的西北角,即方格(1,1)代表的地方,而机房所在的第三实验楼处于东南端的(n,n)。因有多条路线可以选择,LL希望每次的散步路线都不一样。另外,他考虑从A区域...原创 2018-08-03 19:35:26 · 240 阅读 · 0 评论 -
HDU 3879 Base Station (最大权闭合子图)
题意现有n个基站待建。建立一个基站需要付出某个特定的代价。建好的基站之间可以相互通信。有m个工程项目,完成某个工程需要基站a与b可以相互通信,完成后获得报酬c。求最大可以获得的报酬。解题完成项目的先导条件是修建基站a,b。即所选子图的出边所指的点依然在子图中。符合闭合图定义。故此题就是求最大权闭合子图。 将工程项目作为X部,点权值为报酬c。 将基站作为Y部,点权值为修建代价(负权值...原创 2018-07-30 09:23:35 · 209 阅读 · 0 评论 -
HDU 4971 A simple brute force problem(最大权闭合子图)
题意有N个项目需要解决,其中会遇到M个技术问题。 完成每个项目会获得正收益,解决一个技术问题需要付出代价。完成一个项目之前需要先解决与之相关的技术问题。解决一个技术问题x之前,可能需要先解决技术问题y。如果x和y相互依赖,则同时解决。解题将项目看作X部,技术问题看作Y部。 X部与Y部的依赖,则连有向弧(x,y)。 Y部内部yi对yj的依赖(先解决yi,才能解决yj),则连有向弧(...原创 2018-07-29 21:06:22 · 184 阅读 · 0 评论 -
CSU 2114 Open-Pit Mining (最大权闭合子图模板题)
题意一共有块宝石,换取一块宝石会获得价值v,花费代价v。要想获得宝石u必须先获得在u上面的宝石。解题题目描述符合闭合图的定义——图中选一个子图使得子图中点连出边的终点还在子图中。 所以这题就是求最大权闭合子图。 设一个源点S,汇点T。 从S到点权值为正的结点引入一条有向弧,容量为点权值。 从点权值为负的结点到T引入一条有向弧,容量为点权值的绝对值。 原图结点与结点的有向弧保留...原创 2018-07-29 19:48:34 · 238 阅读 · 0 评论 -
UVA11624 Fire(两次BFS+数组记录)
题意给定一个n*m的矩阵,其中‘J’表示人,‘F’表示火,‘#’表示墙,‘.’表示通道。火每分钟朝四周蔓延一个格子,人每分钟也只能从四周走一个格子,为墙的格子火和人都不能走。求人能否逃出矩阵。解题先从火开始进行bfs,并用d[i][j]表示火到达第i行第j列所需的最短时间。再从人开始bfs,加一个到下一个格子的时间必须小于d[i][j]的限制。一开始TLE了一发,想了想就进行了两次...原创 2018-06-20 17:36:36 · 510 阅读 · 0 评论 -
HDU2612 Find a way (BFS的应用)
题意圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车。百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个。。。坤神:我要去左边的这个(因为离自己比较近 哈哈~)。。瑞瑞:我要去右边的这个(因为离自己比较近 嘿嘿~) ……..这对基佬闹矛盾了,开车有危险了! 为了不让他们去召唤师大峡谷坑人,riot决定让他们去X召唤师大峡谷,保证他俩所走的路程和最短。每走一个点需...原创 2018-06-20 16:22:56 · 294 阅读 · 0 评论 -
HDU1495 非常可乐(BFS的应用)
题意王涵斌配了满满一烧杯的硫酸铜溶液,谢璟涵觉得很漂亮,就请王涵斌分一半给她。 王涵斌手中盛满硫酸铜溶液的烧杯容积为A,谢璟涵拿来了两个空烧杯,容积分别为B和C。现在王涵斌可以进行若干次操作。 每次操作都是将一个烧杯里的溶液倒到另一个烧杯中,但因为一些限制,王涵斌不能倒任意体积的溶液,只有当不能再倒了(即倒出的烧杯变空了或倒入的烧杯装满了)才能停止。 王涵斌想要知道最终能不能将这些溶液平...原创 2018-06-20 09:34:04 · 254 阅读 · 0 评论 -
POJ1470 Closest Common Ancestors(离线LCA+注意根的处理)
题意给定一个有根树,查询若干组(u,v)的lca,输出每个结点作为lca的次数。如果一次也没有,则不输出。解题根据根结点没有其他结点指向这一特性确定根,然后调用tarjan算法离线处理所有查询的lca。最后统计并输出即可。AC代码//610ms 7.2MB#include <cstdio>#include <cstring>#inclu...原创 2018-06-12 22:16:55 · 212 阅读 · 0 评论 -
HDU2874 Connections between cities(容易超内存,tarjan离线LCA)
题意给出一个森林,求任意两点之间的距离。若两者不在一棵树上,输出“Not connected”,否则输出两点之间最短距离。解题如果在一棵树上,显然最短距离为u–>lca(u,v)–>v路径上权值之和。设d[u]表示节点u到根节点的距离。 此题卡内存,不能用下面方式存lca。q[i].lca=q[i^1].lca=find(v);使前向星只存to和next,不存fr...原创 2018-06-12 11:10:47 · 222 阅读 · 0 评论 -
POJ2553 The Bottom of a Graph(求被有指向关系的其他点指向的点)
题目链接http://poj.org/problem?id=2553题目We will use the following (standard) definitions from graph theory. Let V be a nonempty and finite set, its elements being called vertices (or nodes). Let E b...原创 2018-05-29 15:01:03 · 197 阅读 · 0 评论 -
Strategic Game HDU - 1054 (二分图最大匹配&&匈牙利算法的运用)
题目链接Strategic Game HDU - 1054 题意Bob在玩一个策略游戏,他现在面临一个问题:他要守卫一个城市。城市的道路形成一颗树,他需要派出若干名士兵站在结点上使得他们能观察到所有边。求需要派出的最少士兵。分析树形图显然是一个二分图,因为用染色法跑一遍可以发现奇数层的结点的颜色和偶数层的结点的颜色不同。我们可以设X集为所有奇数层结点,Y集为所有偶数层结点。 ...原创 2018-04-19 21:57:47 · 141 阅读 · 0 评论 -
模板总结——强连通分量
基本概念对于有向图上的2个点a,b,若存在一条从a到b的路径,也存在一条从b到a的路径,那么称a,b是强连通的。 对于有向图上的一个子图,若子图内任意点对(a,b)都满足强连通,则称该子图为强连通子图。 非强连通图有向图的极大强连通子图,称为强连通分量。 特别地,和任何一个点都不强连通的单个点也是一个强连通分量。tarjan算法伪代码tarjan(u){ Dfn[u]=...原创 2018-04-24 10:35:22 · 1064 阅读 · 0 评论