图论算法
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ4152][AMPPZ2014]The Captain(堆优化dijkstra)
题目描述传送门题目大意:给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。题解分别按照xy排序,然后相邻点连边,跑最短路就行了 写了一发堆优化dijkstra,竟然把大小记反了!代码#include<algorithm>#include<iostream>#include<cstring>#include<原创 2017-05-05 23:11:47 · 1025 阅读 · 1 评论 -
[codevs1557/tyvj1031/USACO OTC09 9TH]热浪[tyvj3187]最小花费 图论算法之dijkstra 学习笔记
图论算法之Dijkstra【算法思路】s[i]表示起点到i的最短路径的值;初始时s[起点]赋为0,其余正无穷;每一次找到一个s[i]最小的点minj,置标记,然后把所有没有标记过的且与点minj相连的点的s值更新一下;重复做,最多做n-1次,就能保证更新了所有的点。但也正是因为这个算法思路的局限性,Dijkstra不适于有负边权的情况;【代码】#include#inclu原创 2015-09-16 19:13:56 · 1502 阅读 · 2 评论 -
[BZOJ2709][Violet 1]迷宫花园(二分+spfa)
题目描述传送门题解二分答案+spfa判定代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 50005const double eps=1e-7;char str[105][原创 2017-03-17 19:16:27 · 475 阅读 · 0 评论 -
[BZOJ2718][Violet 4]毕业旅行(floyed+匈牙利)
题目描述传送门题解同CTSC2008 river代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 205int n,m,x,y,ans;int tot,point[N],nxt[N*N],v[N*N];原创 2017-02-07 18:45:30 · 683 阅读 · 0 评论 -
[UOJ#279][UTR#2B]题目交流通道(floyed+并查集+容斥)
题目描述传送门题解先贴上jiry的题解,讲的还是不错的 http://jiry-2.blog.uoj.ac/blog/2242 然后说一下我觉得比较重要的地方首先这道题怎么来考虑呢?考虑将最短路为0和最短路非0来求 将两两最短路为0的点都缩成一个点,那么形成的这个新图就是一个有很多重边的图,并且点之间的最短路已知 要计算方案数,就是要分别计算缩成的点里有多少方案还有每条边都多少方案的乘积原创 2017-01-09 10:16:22 · 602 阅读 · 0 评论 -
[洛谷3403]跳楼机(spfa+数学相关)
题目描述传送门题解设f(i)f(i)表示只用y和z并且%x=i的所能到达的楼层的最小高度。那么答案为∑i=0x−1⌊h−f(i)x⌋+1\sum\limits_{i=0}^{x-1}{\lfloor{h-f(i)\over x}\rfloor}+1. 显然f((i+y)%x)=f(i)+y,f((i+z)%x)=f(i)+zf((i+y)\%x)=f(i)+y,f((i+z)\%x)=f(i)+z原创 2016-11-17 16:38:46 · 922 阅读 · 0 评论 -
[BZOJ1632][Usaco2007 Feb]Lilypad Pond(spfa)
题目描述传送门题解刚看到这道题的时候想的很复杂,感觉每一次都有前提不是很好搞,但其实这三种都可以直接用最短路来实现。 关键是怎么实现呢?第一次写的时候是做了三遍spfa,每一次求出答案了之后再跑下一次,让下一次满足当前的条件。但是写完之后发现是不对的。显然不对啊!因为当前在跑的时候你无法保证用过的点都是上一问合法的答案。恰恰相反!我们应该在一次spfa里处理这三个问题,只不过是优先级不同而已!原创 2016-11-01 13:48:43 · 611 阅读 · 0 评论 -
[BZOJbegin][NOIP十连测第一场]Tourist Attractions(图的度+bitset)
题目描述 题解时间复杂度算错了+爆int了,然后就只有可悲的40分。 40’:直接暴力枚举4个点。O(n4)O(n^4) 70’: ①暴力枚举三个点,然后判断第三个点是否和第一个点连有一条边(用邻接矩阵就可以),然后加上第三个点的度数-1或-2; ②对于一条路径a-b-c-d,枚举边b-c,然后答案答案即为(du[a]-1)*(du[b]-1)-经过b和c的三元环个数,经过b原创 2016-11-16 19:09:17 · 715 阅读 · 0 评论 -
[BZOJ3445][Usaco2014 Feb] Roadblock(spfa)
题目描述传送门题解首先,翻倍的边一定是最短路必经的边,也就是说,一定在某一条最短路上。 那么随便求出来一条最短路,然后枚举最短路上的边,将边翻倍之后再跑spfa即可。 时间复杂度O(nm)O(nm)。 刚开始的时候没有注意O(nm)O(nm)的复杂度也是可以过的,所以一直在往O(m)O(m)的方向考虑,写的非常麻烦。以后一定要关注复杂度,不一定非得考虑最优的。代码#include<iostre原创 2016-11-16 15:00:07 · 1027 阅读 · 0 评论 -
[BZOJ1967][Ahoi2005]CROSS 穿越磁场(离散化+spfa)
题目描述传送门题解刚开始感觉答案就是两个点属于的不同的矩形数,但是反例显然啊: 原因就是:在穿越过程中机器人不能够沿着磁场的边缘行动! 那这样怎么处理呢?可以发现只有100个矩形,那就先将它离散化,然后在离散化后的图中在两点之间连边。没有跨过磁场的边权为0,跨过磁场的边权为1。然后跑spfa就可以了。 不过离散化的时候需要注意一些小问题。不能直接把第一个出现和最后一个出现的横坐标和纵坐标看原创 2016-10-31 23:42:26 · 884 阅读 · 0 评论 -
[NOIP2001][vijos1119]Car的旅行路线(dijkstra堆优化)
题目描述传送门题解这道题其实就是个最短路裸题,但是繁琐的预处理让其恶心无比。。。 首先我们需要预处理出每一个矩形四个顶点的坐标。读入给出了任意三个坐标,两两距离最长的那两个一定是对角线。那么可以用中点公式算出矩形中心的坐标,然后再计算出剩下的一个顶点的坐标。 然后根据题目描述将每一个点编号然后连边跑最短路就可以了。由于点数很少,边数较多,跑floyed和dijkstra要比spfa优(虽然好像实原创 2016-11-08 20:47:44 · 1197 阅读 · 0 评论 -
[POJ1523]SPF(tarjan求割点)
题目描述传送门 题意:无向图求割点数以及去掉这个割点了之后形成的连通块个数。题解ans[x]表示的是x点的后代能形成的连通块个数。如果x为第一个访问的点,那么连通块个数即为ans[x],如果x不是第一个访问的点,那么连通块个数为ans[x]+1,也就是说加上了来的时候的那个连通块。代码#include<iostream>#include<cstring>#include<cstdio>usi原创 2016-11-07 16:00:14 · 549 阅读 · 0 评论 -
例题:信使 最优乘车 最短路径 图论算法之Floyed 学习笔记
图论算法之Floyed算法思路:最短路问题中,求两个点的最短路,有可能存在中间有中转点的情况,比直接到达要优。Floyed就是利用了这个思路。如果求ij之间的最短路,那么如果ik之间的最短路+kj之间的最短路要小于当前ij之间的最短路的话,我们就认为以k为中转点要更优,更新答案。时间复杂度:O(N^3);【代码】#include#include#includeusing na原创 2015-09-16 18:29:00 · 3256 阅读 · 0 评论 -
例题:最短网络 图论算法之最小生成树 prim//kruskal 学习笔记
图论算法之最小生成树 prim//kruskal 最小生成树简单的说就是在一个图里选取一些边,使这些边以及它们所连接的结点组成一棵树(两两结点之间可以到达),并且使选取的边的边权最小。 它的成立条件是图是连通的。并且选取的边数为n-1。(有n个结点,n-1条边,只能为一棵树,没有别的可能) 主要有两个算法:prim和kruskalprim原创 2015-10-05 11:03:09 · 1290 阅读 · 0 评论 -
[BZOJ1415][Noi2005]聪聪和可可(bfs+概率期望+记搜)
题目描述传送门题解这题题面有点毒 应该是求聪聪吃到可可的时间的期望bfs处理两点之间的最短路 然后预处理出来当聪聪和可可分别在哪里的时候聪聪会向哪里走令f(i,j)表示当某一秒开始时聪聪在i,可可在j一直到聪聪吃到可可的期望 容易知道当i=j时f(i,j)=0 当dis(i,j)<=2时f(i,j)=1 假设当聪聪在i,可可在j时聪聪会走到k,d(i)为i的度数,p=1/(d(i)+1)原创 2017-03-15 20:47:35 · 1068 阅读 · 0 评论 -
[BZOJ1266][AHOI2006]上学路线route(spfa+最小割)
题目描述传送门题目大意:给出一个n个点m条边的无向图,每一条边有长度和代价,先求1-n的长度最短路,在求去掉最小代价的边,使1-n的长度最短路变大题解首先建出来最短路径图,然后连边容量为代价,跑最小割就行了最短路径图也就是图上的每一条边都在至少一条最短路中,判断的时候只需要判断边(u,v,c)是否满足dis(u)+c=dis(v)就行了 让这些最短路都不能1和n连通所以跑一下最小割就行了代码#in原创 2017-05-11 22:23:42 · 1122 阅读 · 0 评论 -
[BZOJ1486][HNOI2009]最小圈(01分数规划+深搜spfa)
题目描述传送门题解01分数规划 如果存在负权环的话说明有更优的答案 写深搜spfa就不会tle了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 20005const double eps=1e-9;原创 2017-03-10 14:03:13 · 569 阅读 · 0 评论 -
[BZOJ2788][Poi2012]Festival(差分约束+floyed+tarjan)
题目描述传送门题目大意:有n个正整数X1,X2,…,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb 2. 给出c,d (1<=c,d<=n),要求满足Xc <= Xd 在满足所有限制的条件下,求集合{Xi}大小的最大值。题解首先差分约束建图+深搜spfa判断负环->无解 tarjan缩点,不同强连通分量里的点不影响(原创 2017-04-18 19:10:28 · 917 阅读 · 0 评论 -
[BZOJ2095][Poi2010]Bridges(二分+最大流+欧拉图)
题目描述传送门题目大意:n个点m条边的无向图,每一条边正向走和反向走的价值是不同的。求图中的一个欧拉回路,并且走的价值的最大值最小。题解很容易想到二分答案,关键是怎么判定 判断欧拉回路的条件有两个:①整个图强连通②每个点的入度=出度 首先如果图中的某一条边断掉了那么无解 然后能走的边有一些是有向边,有一些是无向边,这就是一个混合图的欧拉回路判定问题 首先将每一条无向边随便规定一个方向,求出每原创 2017-04-14 08:46:50 · 615 阅读 · 0 评论 -
[HDU1038]Ant Trip(并查集+欧拉图)
题目描述传送门题目大意:给出一个n个点m条边的无向图,问最少用多少条路径能覆盖每一条边恰好一次。题解用并查集维护出每一个连通块,然后统计每一个连通块内有多少个奇点,对答案的贡献应该为max(x/2,1) 需要注意的一点是如果有一个点自己是一个连通块的话对答案的贡献应该为0代码#include<algorithm>#include<iostream>#include<cstring>#incl原创 2017-04-13 21:32:18 · 661 阅读 · 0 评论 -
[BZOJ3706]反色刷(并查集+欧拉图)
题目描述传送门题解欧拉回路,比较显然的一点是有解的充要条件是没有奇点 刚开始一直在往维护黑边的连通块个数的方面考虑,然后就一直在想什么写个lct啊… 但实际上这样做是有一点问题的,因为白边不一定不走只要走偶数次就可以 那么可以将一条白边看成两条黑边,这样的话对每个点的奇偶性是没有影响的,而且同样是求欧拉回路 用并查集先维护出连通块了之后,只需要记录一下每一个连通块是否有黑边,如果有黑边的话就原创 2017-04-13 21:05:18 · 876 阅读 · 0 评论 -
[BZOJ3033]太鼓达人(欧拉图+dfs)
题目描述传送门题解这道题实际上是将k-1位的二进制数看做点,k位的二进制数看成边,并且连接两个点的边就是将这两个点的权怼起来 像这样 然后每个点的入度和出度相等并且全部是偶点,是一个标准的欧拉图,所以只需要在这个图中找字典序最小的欧拉回路就行了 可以贪心地找字典序较小的边,然后实在不行了就回溯 这样的话时间复杂度我不大会…不过实测了一下是接近O(n+m)O(n+m)的吧代码#includ原创 2017-04-13 17:23:10 · 2331 阅读 · 1 评论 -
[COGS826][Tyvj Feb11] GF打dota(k短路)
题目描述传送门题目大意:给出一个n个点m条边的无向图,当p=0时求最短路,当p=1时求严格次短路。题解k短路裸题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 100005原创 2017-04-18 08:02:19 · 698 阅读 · 0 评论 -
[BZOJ2304][Apio2011]寻路(模拟+spfa)
题目描述传送门题目大意:在二维平面上有起点和终点,若干不相交、边界平行或竖直的矩形。不能进入矩形内部,只能在矩形的边界上改变方向,求起点到终点的最短距离或者No Path。题解这题和之前写过的冰原探险那道题挺像的,都是将这种图连边然后跑最短路 因为最优情况下只会在矩形的顶点处改变方向,所以可以先将坐标离散化,然后对于矩形的每一个顶点向第一个能到达的地方连边 这样的话除了矩形的顶点图上还会多出来一原创 2017-04-28 08:05:56 · 1198 阅读 · 0 评论 -
[BZOJ1975][Sdoi2010]魔法猪学院(k短路)
题目描述传送门题解这道题实际上就是要求出最短路、次短路…看能够承受多少 用A*算法找k短路即可代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 5003#define E原创 2017-04-13 08:04:21 · 652 阅读 · 0 评论 -
[BZOJ1598][Usaco2008 Mar]牛跑步(k短路)
题目描述传送门题解k短路A*算法模板题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 10005#define LL long longint n,m,k,s,t;in原创 2017-04-13 08:02:29 · 960 阅读 · 1 评论 -
[POJ1144]Network(tarjan求割点)
题目描述传送门 题意:求一个无向图中割点的数量。题解tarjan求割点模板题。 dfn表示点x的时间戳,low表示点x通过其后代最早能到达的点,is_cut表示点x的后代最多能有多少个连通块。 假设一个点是割点,如果这个点是第一个被访问点,那么如果它后代能形成一个以上的连通块的话它就是割点。如果这个点不是第一个被访问的点,那么如果它后代能形成一个或以上的连通块的话它就是割点。代码#includ原创 2016-11-07 15:55:24 · 496 阅读 · 0 评论 -
[noip测试]零食店(floyed+二分)
snackstore.in snackstore.out 时间限制:1 s 内存限制:256 MB题目描述成功找到了学长之后学姐感觉到有些饿,于是决定去附近的零食店给自己和学长买些零食。 焦作市的有n家零食店,由m条道路连接着这些零食店,每条道路都有自己的长度l,每家零食店都有自己的消费指数。 由于学姐是个穷B,所以去买零食的路上不能经过某些消费指数超过一定限度的店。原创 2016-11-06 17:32:46 · 808 阅读 · 0 评论 -
[BZOJ3887][Usaco2015 Jan]Grass Cownoisseur(tarjan+spfa)
题目描述传送门题解边是可以重复走的,所以在同一个强连通分量里,无论从那个点进入从哪个点出,所有的点一定能被一条路走到。 那么首先用tarjan将所有的强连通分量缩成一个点,每个点的权为该强连通分量中点的个数。然后我们考虑将一条边反置。 强连通分量里的边反置是没有价值的,所以只需要考虑DAG里的边。枚举一条要反置的边,如果将这条边反置的话,答案应该为它的起点到1最多能走到的点数和1到它的终点最多能原创 2016-11-04 13:00:34 · 802 阅读 · 0 评论 -
[BZOJ3931][CQOI2015]网络吞吐量(spfa+最大流)
你愿用一生,等待,然后呵护这短暂的光亮吗?原创 2016-05-10 16:00:04 · 1045 阅读 · 0 评论 -
【POJ3195】Candies(差分约束系统)
一切伤口都保持着温度,一切温度都牵扯着疼痛,一切疼痛都呼唤着愈合,一切愈合都保留着勉强。原创 2016-03-11 23:07:13 · 752 阅读 · 0 评论 -
【BZOJ1001】【Beijing2006】狼抓兔子(平面图转对偶图:最小割+最短路)
回头发现,你不见了,突然我乱了。原创 2016-02-24 17:18:50 · 1477 阅读 · 0 评论 -
[BZOJ3049][Usaco2013 Jan]Island Travels(dfs+spfa+状压dp)
最不洁的目光,总在监察道德。原创 2016-03-31 23:39:22 · 994 阅读 · 0 评论 -
【校内互测】无聊的军官
只有经历地狱般的磨炼,才能炼出创造天堂的力量;只有流过血的手指,才能弹出世间的绝唱。原创 2016-01-30 15:07:49 · 755 阅读 · 0 评论 -
【codevs1002】搭桥
愿言配德兮,携手相将。不得于飞兮,使我沦亡。原创 2016-01-03 19:10:11 · 709 阅读 · 0 评论 -
判断图是否有环
QAQ转载 2016-01-17 21:08:05 · 1498 阅读 · 0 评论 -
【codevs2066】三角恋
人得自己成全自己原创 2016-01-17 19:43:47 · 746 阅读 · 0 评论 -
【codevs2039/USACO】 骑马修栅栏 图论算法之欧拉(回)路
图论算法之欧拉(回)路下面来简单说说图论算法中的欧拉路和欧拉回路,也就是简单的一笔画问题。如果从一个图的任意一点出发,能不重复地遍历所有的边,那么这就是一个欧拉路;如果不重复地遍历了所有的边之后,最终又回到了起点,那么这就是一个欧拉回路;存在欧拉路和欧拉回路的图都必须保证是连通的;奇点偶点的概念:一个点的度是偶数是偶点,一个点的度数是奇数是奇点;如果图中有且只有两个奇点,那原创 2015-09-07 19:50:25 · 912 阅读 · 0 评论 -
【codevs1079】回家 解题报告
【codevs1079】回家 解题报告题目描述 Description现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(原创 2015-09-19 09:24:44 · 991 阅读 · 0 评论 -
【codevs1045】 奶牛的旅行 解题报告
【codevs1045】奶牛的旅行 解题报告题目描述 Description农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通。这样,农民John就有多个牧场了。 John想在农场里添加一条路径(注意,恰好一条)。对这条路径有以下限制: 一个牧场的直径就是牧原创 2015-09-18 21:01:33 · 578 阅读 · 0 评论