随笔分类 - DFS
摘要:事实上我们可以发现,如果最后,那么我们可以连一条边,从到 这样我们就得到了一个有向图,在这张有向图呢,可以证明的是 如果,那么必须全部都是自环。 若不成立,则必须每个环的大小恰好为 这样就可以解决了。 #include<cstdio> #
阅读全文
摘要:Lisa 显然一定会走条边,会有一条边剩下走不了 这一条边是谁呢 这个图上有一个环,这个环呢上的每一个点,他走不到的那个边一定是在这个环上的和它相邻的那两个边当中的那个美观度较小的(显然等到回来的时候就是走完了) 对于不在换上的点,一定会走到环上,然后就和第一种情况一样了. #includ
阅读全文
摘要:Jennie 根据异或的性质,,如果A到B的路径和A到C的路径的异或和都是零 那么B到C的也都是零 所以说嘛,我们只要考虑从一个叶子节点外走就可以了 如果这一个叶子节点到其他叶子节点的路径都是偶数,,那么全设为1就是一种很好的方案 如果有奇数的路径,那么再搞出两个数,比如说2和3,就能构造出来了 那
阅读全文
摘要:Jisoo 如果这玩意成不了二分图,肯定有环,而且还是肯定有一个三元环 如果一个点到两个点的距离那么这两个点之间的距离一定大于k 那么我们只要确定存不存在这样的三元组就可以了 怎么确定呢 画图可得,如果有三元环,那么这个三元环一定会存在一种包括两端点的情况 然后就显然我们要找直径,检查每一个
阅读全文
摘要:Archie 显然做法就是建反图,每个点都遍历一下,然后能过 然而有几个点死能卡常数,怎么办呢 干他 如果一头牛不能到达所有奶牛,它能到的所有牛都不行,同理,如果一头奶牛可以,它能到的所有牛都行 然而,这么干还是会被最后一个点干掉。 采用vector,对于每一个点的出边从小到大排序,因为最后枚举是
阅读全文
摘要:P2736 [USACO3.4]“破锣摇滚”乐队 Raucous Rockers 死小的数据范围 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,
阅读全文
摘要:Aimee 因为可以堵出口和入口,所以只有 那么先dfs一遍并且封锁路径,然后再dfs一遍 #include<iostream> #include<cstdio> #include<algorithm> #include<cstdio> #include<vector> us
阅读全文
摘要:Aimee 数据很小,直接爆搜 唯一麻烦的是检查是否重叠以及计算面积 但问题也不大 记得剪枝 #include<iostream> #include<cstdio> #include<algorithm> #include<cstdio> #include<cstring> using namesp
阅读全文
摘要:Aimee 思维难度没有 唯一的剪枝就是从0少的列开始搜索 记录下所有能放的点的坐标,按顺序搜索 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; struct
阅读全文
摘要:Aimee 很水的题目 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int mx[5]={0,1,-1,0,0}; int my[5]={0,0,0,-1
阅读全文
摘要:Aimee 很显然我们并不知道到底会搜索出多少层 但是最优解一定不会太大 那么迭代加深搜索会是一个好的选择 迭代加深要限制层数,这很显然 那么就此来说,当就剩下一个分数可以选的时候 我们要判断这个分数是不是单位分数,如果他是,再判断一下是不是最优解 这样就解决了dfs中的一半(体积意义上)的问题 i
阅读全文
摘要:Aimee 记忆化搜索非常好写, 尤其是从一个朴素的搜索开始改造。 sum是要记录的,但是没必要存在状态里 直接统计一下当前节点是第几步之后的方案数 虽然说时间复杂度没有朴素的优美 但是不会MLE啊 #include<iostream> #include<cstdio> #include<cstri
阅读全文
摘要:Aimee 很简单的小dfs 额 其实是套着dfs壳的贪心 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,dis; int pl[100001]; int ans; void df
阅读全文
摘要:Aimee 很恶心的一道题 我们在考场上会遇到很多题,无论多难,都要大声喊出:"无所谓"。 怎么无所谓,有所谓 --scz 10分做法 爆搜 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using
阅读全文
摘要:MIku 这是一道数学题,可以推式子(我推错了) 这是一道dp,完全没想到它是。 所以说我把我的错误式子缝缝补补,加上个dfs 过了。 大体思想就是利用插板法求出每个盒子可以装几个球的方案, 然后因为同一个盒子内部的球是无序的,所以说用一点点排列的知识加上dfs的框架处理一下,然后就过了 #incl
阅读全文
摘要:Miku 很好的坑题,务必注意因为负边权和求路径的问题,这里需要同时用到两种方法,搜索和dp。 对于原来的情况,事实上就是每一条边都要走两次,(毕竟你还要回来啊) 但是你要是建了一条边,就会形成一个环,那么这辆车就可以直接走回去了(沿着这个圈回到出发点,也就是说,少了一条边长度的距离) 那么怎么搞呢
阅读全文
摘要:Miku 一个很简单的搜索 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; int map[1001][1001];//地图 int vis
阅读全文
摘要:Miku 这题目很water 只要按照题意模拟就行了,数据似乎没有重边,那么对于加入每一条边的时候,如果两端点没联通,那么连上,反之 先连上,形成一个环,去点环上最大的边 数据范围不大对 #include<iostream> #include<cstdio> #include<algorithm>
阅读全文
摘要:链接Miku 代码参考:小蓝书 暴力很好写,可惜过不了,怎么办,剪枝起飞。 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n; int len[50
阅读全文
摘要:链接Miku dfs就行了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int head[100001]; int p; int n; int m; in
阅读全文