随笔分类 -  图论

摘要:注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关。 第一题: 题意: 对n个数升序排序。 题解: 快排,不解释。 代码(省略了输入输出函数,下同): 1 val n = getInt (); 2 val l = getIntTable (n); 3 fun qsort [] = 阅读全文
posted @ 2019-11-11 11:49 YuanZiming 阅读(1509) 评论(0) 推荐(0)
摘要:背景: 只是想来备份一下最近的代码,顺便总结一下三种最短路算法的应用。 基础代码: dijkstra: spfa(bfs+slf): spfa(dfs): floyd: 1 inc(k,1,n)inc(i,1,n)inc(j,1,n)if(map[i][k]+map[k][j]<map[i][j]) 阅读全文
posted @ 2016-11-13 16:32 YuanZiming 阅读(444) 评论(0) 推荐(0)
摘要:bzoj2346[Baltic 2011]Lamp 题意: 给出一个像下图一样的电路图,长为n,宽为m,求最少将几个"\"改成"/"或将"/"改成"\"使左上角和左下角联通。n,m<=500 题解: 如果某格是/,则左上角和右下角连边,长度为0,左下角和右上角连边,长度为1;如果某格是\,则左上角和 阅读全文
posted @ 2016-11-13 16:01 YuanZiming 阅读(174) 评论(0) 推荐(0)
摘要:bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控。对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点。n≤200。 题解: 每个点拆成两个点,边权为点权 阅读全文
posted @ 2016-11-11 20:05 YuanZiming 阅读(198) 评论(0) 推荐(0)
摘要:bzoj4152[AMPPZ2014]The Captain 题意: 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。n≤200000。 题解: 结论:按某维坐标排序后,只有相邻两个点的距离才可能是这两个点的最小 阅读全文
posted @ 2016-11-11 19:05 YuanZiming 阅读(317) 评论(0) 推荐(0)
摘要:bzoj3436小K的农场 题意: n个数,知道m条关系:a-b≥c、a-b≤c或a==b。问是否存在满足所有关系的情况。n≤10000,m≤10000。 题解: 差分约束。因为只要求是否满足,因此最短路最长路都可以。不过要注意如果是用spfa的bfs写法,每个点都必须作为源点判一次负环,因为图可能 阅读全文
posted @ 2016-10-20 18:56 YuanZiming 阅读(222) 评论(0) 推荐(0)
摘要:1731: [Usaco2005 dec]Layout 排队布局 题意: n头奶牛在数轴上,不同奶牛可以在同个位置处,编号小的奶牛必须在前面。m条关系,一种是两头奶牛距离必须超过d,一种是两头奶牛距离不能超过d。要求:如果不存在情况满足要求则输出-1,奶牛1到n的距离可以为无限大输出-2,否则输出1 阅读全文
posted @ 2016-10-20 14:39 YuanZiming 阅读(398) 评论(0) 推荐(0)
摘要:bzoj1774[Usaco2009 Dec]Toll 过路费 题意: n点m边,从点a到b的费用为边权和加a到b经过点的点权最大值,给出q个询问问从a到b的最小费用。n≤200。 题解: 用先对点权排序,接下来用floyd算每两个点的最短路和最小费用,因为点权已经单调了,所以求路径的点权最大值之间 阅读全文
posted @ 2016-10-20 14:24 YuanZiming 阅读(184) 评论(0) 推荐(0)
摘要:bzoj2200[Usaco2011 Jan]道路和航线 题意: n点图,两种边:有向边,权值可能为负数。无向边,权值为正数。求单源最短路。n≤25000,边数≤100000。 题解: 听说spfa会挂,于是写了dijkstra,WA了n次后才知道dijkstra不能处理负权边QAQ。后来在ZS大爷 阅读全文
posted @ 2016-10-19 21:43 YuanZiming 阅读(337) 评论(0) 推荐(0)
摘要:bzoj1706[usaco2007 Nov]relays 奶牛接力跑 题意: 无向图,求刚好经过n条边的最小距离。边数≤100,n≤1000000。 题解: 边数≤100,说明点数不超过200。故可以用floyd。但要用一点技巧,即倍增floyd:定义最短路矩阵之间的乘法为对它们做floyd,则最 阅读全文
posted @ 2016-10-17 21:20 YuanZiming 阅读(363) 评论(0) 推荐(0)
摘要:bzoj1672[Usaco2005 Dec]Cleaning Shifts 清理牛棚 题意: n头奶牛,第i头愿意在时刻si到ti打扫牛棚,费用为ci,求打扫S到T时刻的最小费用。n≤10000,时刻≤90000。 题解: 最短路,si和ti+1连边,长度为ci,以及所有时刻ai和ai-1连边,长 阅读全文
posted @ 2016-09-25 15:54 YuanZiming 阅读(316) 评论(0) 推荐(0)
摘要:bzoj1486[HNOI2009]最小圈 题意: 定义图中一个环的平均值为环上边权和除以(浮点除法)边数,求一个图中的最小环平均值,保留8位。n≤3000,m≤10000,有负权边。 题解: 这就是比较明显的01分数规划了,见bzoj1690。同时根据题解二分60次就行了。 代码: 2016092 阅读全文
posted @ 2016-09-23 21:34 YuanZiming 阅读(144) 评论(0) 推荐(0)
摘要:bzoj1690[Usaco2007 Dec]奶牛的旅行 题意: n点m边有向图,点有点权,边有边权,奶牛想要从某点出发,走一些路使得经过的点权和除以(浮点数除法)边权和最大,求这个小数(保留两位)。n≤1000,m=5000。 题解: 01分数规划!太神了,然而我看不懂证明,所以直接给出算法。假设 阅读全文
posted @ 2016-09-23 21:19 YuanZiming 阅读(540) 评论(0) 推荐(0)
摘要:bzoj1682[Usaco2005 Mar]Out of Hay 干草危机 题意: 给个图,每个节点都和1联通,奶牛要从1到每个节点(可以走回头路),希望经过的最长边最短。 题解: 求最小生成树即可。 代码: 1 #include <cstdio> 2 #include <cstring> 3 # 阅读全文
posted @ 2016-09-20 21:36 YuanZiming 阅读(209) 评论(0) 推荐(0)
摘要:bzoj1232[Usaco2008Nov]安慰奶牛cheer 题意: 给出n个节点的带权图,第i个节点ci。现在你要在这个图中选出一棵树和一个起点,然后你要从起点出发到达所有的节点(不能跳点)再回到起点,经过边的时间为边权,每经过一个点就要花等同于点权的时间(即使这个点已经过)。问如何使时间最短。 阅读全文
posted @ 2016-09-18 20:27 YuanZiming 阅读(176) 评论(0) 推荐(0)
摘要:bzoj1715[Usaco2006 Dec]Wormholes 虫洞 题意: 判一个图是否有负环。点数≤500,边数≤3000。(我看不懂原题,后来看了题解,就直接这样说了) 题解: SPFA中如果一个点被更新了n次以上,那么这个图中存在负环。 代码: 20160912 阅读全文
posted @ 2016-09-16 15:52 YuanZiming 阅读(201) 评论(0) 推荐(0)
摘要:bzoj3538[Usaco2014 Open]Dueling GPS 题意: 给你一个N个点的有向图,设定初始位置为1,结束位置为n。有两个GPS定位系统,分别认为经过边i的时间为Pi,和Qi.每走一条边的时候,如果一个系统认为走的这条边不是它认为的最短路,就会受到警告一次。如果走的这条边都不在两 阅读全文
posted @ 2016-09-16 14:55 YuanZiming 阅读(259) 评论(0) 推荐(0)
摘要:bzoj3396[Usaco2009 Jan]Total flow 水流 题意: 求无环图的最大流。边数≤700。 题解: 管它有没有环。注意本题的节点标号既有大写字母,也有小写字母。 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include < 阅读全文
posted @ 2016-09-15 22:09 YuanZiming 阅读(231) 评论(0) 推荐(0)
摘要:bzoj1726[Usaco2006 Nov]Roadblocks第二短路 题意: 求无向图点1到n的次短路(长度严格小于最短路)。点数≤5000,边数≤100000。 题解: 求源点为1的单源最短路和源点为n的单源最短路。然后枚举每个点,如果某点到点1和点n的距离和不等于1到n的最短路距离且最小则 阅读全文
posted @ 2016-09-11 15:52 YuanZiming 阅读(266) 评论(0) 推荐(0)
摘要:bzoj2292【POJ Challenge 】永远挑战 题意: 有向图,每条边长度为1或2,求1到n最短路。点数≤100000,边数≤1000000。 题解: 有人说spfa会T,所以我用了dijkstra。不过这不是正解,神犇ZS告诉我正解应该是把所有边长度为2的边拆成两条,orz…… 代码: 阅读全文
posted @ 2016-09-11 15:00 YuanZiming 阅读(180) 评论(0) 推荐(0)