
图论
文章平均质量分 76
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
UVA572dfs连通块
这题WA了一发,简单的连通块,手残了,输入的时候本来下标都是打算从一开始的,然后还有gets输入,另外如果是从1开始的下标记得取余什么的n要加一,另外已经加入队列的记得标记为1.#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2015-08-28 10:55:37 · 446 阅读 · 0 评论 -
UVA10596欧拉回路加特判
这题呵呵了,一开始就是对的,搞了俩个小时才发现只是把特盘的Possible写成了possible,真的是呵呵了。#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusin原创 2015-09-05 18:34:03 · 489 阅读 · 0 评论 -
UVA10305拓扑排序
拓扑排序模板直接贴就行了:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=1e2+1原创 2015-09-05 21:17:27 · 373 阅读 · 0 评论 -
UVA196拓扑排序形式的搜索
这题从表面上来看是一个拓扑排序,然而实际上是一个搜索,起初看到这题行数是0~999,而列数是1~18278,然后感觉只输出都会超时,不敢写,后来发现别人写的列数都变成了1000,完全不知道怎么回事,也不明白怎么莫名其妙的变成了1000,然后就好写了,1000*1000个格子,建立一个G[1000*1000]的vector去存是公式的那个格子所有求出答案所需要的格子的下标,然后一个一个去原创 2015-09-08 11:32:19 · 429 阅读 · 0 评论 -
小白书之隐式图的bfs
可以把三杯水各个时候的状态想象成一个点,能到达的点画一条有向边,这样就出现一个图,对这张图进行dfs,这里注意要用一个set去掉重复的状态,以免陷入死循环。同时这题用一个数组同时存储了三个杯子的状态并且顺带储存了父亲节点的状态,比较巧妙,但是好像一般bfs都是手写的队列,但是我习惯了用queue容器。#include#include#include#include#includ原创 2015-09-14 14:01:40 · 780 阅读 · 0 评论 -
小白书隐式图搜索之八数码问题
这题也是一个隐式图的问题,bfs即可,既是简单bfs的结构体办,用一个二维数组去存储每次可到达的点的状态,这题既是一个二维数组去存储九个数的状态,另外记得要写初始化函数look_up_table()和判重函数insert(),(即简单那bfs中的vis数组),俩个条件均满足方可插入队列,由于要存储状态这里用数组去代替队列更容易,而且可以增加二维数组的第二维的维数用来存储距离或者父节点原创 2015-09-14 19:59:30 · 753 阅读 · 0 评论 -
HDU5483求一个图中的最小生成树不能去掉的边的数目
没研究过图论,暂时看不太懂,留着慢慢看吧。题解:首先使用Prim算法求出这个图的最小生成树,对于每条非树边都对于着树上的一条链。如果有一条非树边的权值和对应链上的某条树边相等,就可以交换这两条边使得树边不一定在最小生成树上。所以我们需要对每条树边,看所有覆盖他的非树边的权值有没有和本身相等的,因为非树边的权值不会小于树边,所以只需看覆盖该树边的非树边的最小权值。这个原创 2015-10-02 12:55:27 · 847 阅读 · 0 评论 -
UVA193图染色问题
这题是一个简单题,可是有个地方我不太明白,我的递归刚开始好像写残了,写成这样就不对: if(ok) { vis[u]=1; dfs(u+1,sum+1); vis[u]=0; } vis[u]=-1; dfs(u+1,sum); vis[u]=0;当时不知道怎么想的,黑的标记成1,白的标记成-1,然原创 2015-10-03 22:38:58 · 521 阅读 · 0 评论 -
HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
这题智商低,想了很久没有想到怎么做,其实想通了很简单,由于俩个数列都是1~n的排列,所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。总有那么些巧妙地题是我这种智商低的想不到的。#include#include#include#include原创 2015-10-04 03:22:07 · 875 阅读 · 2 评论 -
UVA208在一个图中,给定终点和起点,搜索路线,巧妙剪枝
这题貌似后台数据都是比较密的图,所以暴搜的话必定会T,这时就要加强剪枝,想了一会,也试了几发,没有找到正确的剪枝姿势,一直T,后来看别人的,是开了数组预处理下,从终点开始求连通块,因为必须和终点在一个连通块才能到达,然后就可以搜了,这个剪枝刚开始其实有想到,但是想错了,我想的是正反同时搜索,然而并不能实现,能想到用连通块去预处理也是挺巧妙的,另外这题还有一个坑点,题中并没有说要按字典序原创 2015-10-04 00:20:51 · 766 阅读 · 0 评论 -
UVA10160在一个图中选择几个点,使得这些点加上相邻的点为这个图的顶点集
很明显爆搜一发肯定T,肯定要加剪枝,关键就在于你怎么样去剪枝,另外本弱刚开始想写一个搜索,竟然笨到这种情况不会还原vis标记数组,其实就是遇到加一,还原减一,而不是简单的等于0和等于1。然后讲一下剪枝,这里比较容易想到的一个剪枝就是搜索到某个状态站点数已经大于当前的最小站点数了,就不用继续搜下去了,就return。然而这只是一个很小的剪枝,并没有什么卵用,这里关键的剪枝在于:位向量原创 2015-10-08 22:02:57 · 600 阅读 · 0 评论 -
UVA10129欧拉道路
先说一下什么是欧拉道路:从图的一个结点出发走出一条道路,每条边恰好经过一次。这样的路线称为欧拉道路,也可以形象的称为"一笔画"。原理:当然我不理解为什么是这个原理,也不会证明。不难发现:在欧拉道路中,进和出事对应的,除了起点和终点外,其他点的进出次数应该相等。换句话说,除了起点和终点外,其他点的度数应该是偶数。上述条件也是充分条件,如果一个无向图是连通的,且最多只有俩个奇点原创 2015-09-05 14:40:29 · 442 阅读 · 0 评论 -
UVA10047四维bfs
本来是小白书上面给的习题,神奇的变成了大白书上例题。其实就是一个四维的bfs,因为每个格子多了俩个状态,即方向和颜色,另外bfs搜索最短路的原理是根据搜到的下一个格子是上一个格子距离加一来算的,因为是宽搜,所以一旦搜到要到达的点,则那个点存的距离即使到那个点的最短距离,而这个题,当它在原本的格子里不动的时候即为一个状态,时间即加一,但是格子距离并不加一,所以和bfs搜索最短路的原创 2015-09-04 21:03:42 · 437 阅读 · 0 评论 -
杭电5285二分图染色和并查集
这道题有俩种做法,一种二分图,一种并查集,但是实际上俩种本质上是一样的,二分图是在同一条线段的俩段染上不同的眼色,而并查集是用二维数组1和2判判奇偶层,和是否相容,都是遍历所有的树。二分图:#include#include#include#include#include#include#include#include#include#include#includ翻译 2015-07-22 11:21:02 · 456 阅读 · 0 评论 -
UVA784简单dfs
本来很简单的搜索,可以1A的,结果就忘记getchar()了,编译运行的时候也没有注意到多了一行空格,结果导致浪费了很长时间,还YY了一会。是不是题意理解错了,还改成了复杂一点的代码去WA,呵呵。#include#include#include#include#include#include#include#include#include#include#include原创 2015-08-31 19:27:55 · 387 阅读 · 0 评论 -
小白书之迷宫八连块的递归写法和栈写法
如果用递归的话,如果图过于大,有栈溢出的危险,所以这里用个栈写法。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using namespace std;const int maxn=10原创 2015-08-17 10:03:17 · 643 阅读 · 0 评论 -
小白书之迷宫最短路径bfs
vis标记,以免更改了值和路径,同时打印路径时用递归同样会有溢出的危险,改成非递归即可。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using namespace std;cons原创 2015-08-17 11:32:17 · 558 阅读 · 0 评论 -
小白书之拓扑排序
将小于关系转化为一条有向边,则所有关系组成一张图,dfs这张图,有环则直接退出不存在拓扑排序,否则将元素加入拓扑序首部。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using nam原创 2015-08-17 14:56:26 · 469 阅读 · 0 评论 -
HDU529最小割和单源最短路
没搞过图论,看了一天的标程也没完全搞明白,懂那么一点,抄袭了一遍标程,交上去结果CE,呵呵,然后交了一发标程还是CE,呵呵,回头有空再演究下,贴一发CE的代码:#include #include #include #include #include #include #include #include #include #include using namespac翻译 2015-07-24 19:48:39 · 454 阅读 · 0 评论 -
UVA532三维bfs
很简单的题目,把二维搜索改成三维就行,把方向改一下就可以了。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namesp原创 2015-09-02 14:52:06 · 402 阅读 · 0 评论 -
UVA10557SPFA或者bfs+dfs
这题有俩种做法,第一种,也即是最容易理解的就是dfs+bfs.刚开始写的时候,dfs那里刚开始时直接处理了sum,让sum+a[tem]。然后一直调BUG不知道哪里错了,后来发现后面的俩个if语句处理的是有正环的情况和非环的情况,而这题可能会有负环,提前加了sum,显然是不对的。#include#include#include#include#include#原创 2015-09-04 14:31:27 · 476 阅读 · 0 评论 -
UVA439深搜和宽搜区别
这题其实就是一个变种的宽搜,很简单,可是后来发现自己把宽搜和深搜给记反了,这题就一直写的是深搜,但是显然宽搜的题用深搜做事不对的,也学可以,反正本弱不会,但是前面几个深搜的题目,我都是用宽搜做的,事实证明深搜的题目是可以用宽搜来做的,而深搜和宽搜的最主要区别就是深搜用栈来实现,而宽搜用队列来实现,然后想象一下栈和队列的调用过程,很简单就可以知道深搜和宽搜的区别。#include#原创 2015-09-02 14:02:57 · 1481 阅读 · 0 评论 -
UVA10054欧拉回路
解释下什么事欧拉回路,欧拉回路就是欧拉道路的进化版,欧拉道路是存在俩个奇点,从一个奇点出发到另一个奇点,而欧拉回路是不存在奇点,从任意点出发最终一定会回到该点。无向图的欧拉回路判断和路径输出1.判断所有的点的度是否为偶数,如果有点不为偶数,则不存在欧拉回路2.满足1的条件下,判断所给的图是否连通,不连通也不是欧拉回路3.满足1和2的就是欧拉回路,然后dfs逆序输出路径,原创 2015-09-05 15:55:46 · 516 阅读 · 0 评论 -
蓝桥杯 国王的烦恼 反向并查集
这题刚开始用搜索做的,超时不超时不知道,因为测试数据都没过,然后看到别人用的反向并查集,秒懂,因为起初我也是想的用并查集,但是想的是正向并查集,没有想到反向并查集。#include#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2016-03-17 18:45:42 · 861 阅读 · 0 评论