![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dfs&bfs
文章平均质量分 52
a1214034447
这个作者很懒,什么都没留下…
展开
-
uva 11210 暴力搜索
说坑点没不是很明显,玩过麻将的都知道吧。。。(可我被自己坑了好久) 只要每次拿出一个对子出来,然后剩下12张看3张3张去能不能去完这个可以dfs就OK了。 题解: #include #include #include #include #include #include using namespace std; typedef long long ll; int n,m,num[40]原创 2017-05-06 11:02:32 · 364 阅读 · 0 评论 -
牛客网暑期ACM多校第三场G - 数论
题目链接:点击这里 解题思路: 处理这个问题之前我们先来考虑更简单的问题: 在长度为n的连续块上有m种染色颜料,而且距离小于等于k的块颜色不能相同的染色数是多少? 首先我们知道如果m<k,那么肯定无解。 那么染色方案数为:m*(m-1)*(m-2)*(m-3)*...*(m-k+1)*(m-k+1)*(m-k+1).... 到第k块时它就会受到前面k-1块的限制,必须两两不...原创 2018-08-04 22:34:03 · 211 阅读 · 0 评论 -
hdu 6446 - 任意两点路径和
题目链接:点击这里 解题思路: 考虑u,v两个点路径对答案的贡献次数,因为是全排列,那么u,v可以放在1,2位置,2.3位置。。。有(n-1)个位置,在颠倒一下顺序就是(n-1)*2,然后其他n-2个点可以随意排,也就是(n-2)!,所以任意一条边的贡献次数就是2*(n-1)! 所以问题就变为求任意两点的路径和,在这个问题上没条边的贡献就是用这条把树节点分为两个部分,那么这个边的贡献次...原创 2018-08-25 20:33:54 · 391 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 C - dfs计算期望最大值
题目链接:点击这里 解题思路: 对于这么一个3*3的格子一共就是有八种选择,那么题目要求在这八种的选择的的值的期望中输出最大的那个. 那么我们首先就去固定'*'号我们不知道而M知道的点,将他变为已知的值,然后再去暴力dfs枚举'#'号的值,求出这次所有‘*’号固定的情况的八种中的最大期望.最后将最大期望和对固定'*'号方案数求均值就是最后最大值期望了. #include<...原创 2018-09-12 22:53:52 · 167 阅读 · 0 评论 -
Gym - 101635C - dfs+矩阵快速幂
题目链接:https://vjudge.net/problem/Gym-101635C 解题思路; 对于每一列一共有(1<<n)个状态,0表示没方块,1表示有,对于f[m][i]表示前m-1列都是满的,第m列是i个状态的方案数,那么f[m][i]就可以从f[m-1][]中的若干个转移过来. 然后利用dfs求出系数矩阵,之后进行快速幂. 1.在m列的第j行放一共1*1的方块...原创 2018-10-26 20:42:10 · 207 阅读 · 0 评论 -
SPOJ - CATTACK - 最短路或者dp
题目链接:https://vjudge.net/problem/SPOJ-CATTACK 解题思路; 根据思路建图跑最短路,或者dp更简单. #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; const int mx = 2e5+10; struct node{ int y,w;...原创 2018-10-30 20:28:41 · 200 阅读 · 0 评论 -
Gym - 101611G - 差分约束系统
题目链接:https://vjudge.net/problem/Gym-101611G 解题思路; 解法一; 判断列上横值相加是否为0和横上列值相加是否为0,如果全是则有解,否则无解, 如果列上横值相加等于0,那么就说明可以把这一列的所有横值都变为0. 假设一列的横值为x1,x2,x3....那么在此列的第一个行设置风力为-x1,那么第一个值就变为0,x2则需加上相反数也就是x1,...原创 2018-10-30 20:45:50 · 361 阅读 · 0 评论 -
ACM-ICPC Nanjing Onsite 2018 - K(随机枚举+四维bfs)
题目链接:https://nanti.jisuanke.com/t/33680 解题思路: 随机两个袋鼠的位置,使得让他们相遇,那么这个操作就是一个四维的bfs,前两维代表第一只袋鼠的位置,后两维表示第二只袋鼠的位置。这样随机枚举最多是N*M次。 所以时间复杂度最最最最坏情况也就O(N^3*M^3)。 #include <bits/stdc++.h> using ...原创 2018-12-02 13:32:19 · 261 阅读 · 0 评论 -
CF 542C - n^4枚举
题目链接:http://codeforces.com/contest/1130/problem/C 解题思路: 一个数组维护(r1,c1)能到达的点,一个数组维护(r2,c2)能到达的点,数组两两枚举取最小即可。 #include<algorithm> #include<cstdio> #include <iostream> #include...原创 2019-03-07 20:17:44 · 178 阅读 · 0 评论 -
Gym - 101480K[DFS+思维]
题目链接:http://fastvj.rainng.com/problem/Gym-101480K 题目链接: 实际上我们只能确定出三种情况: 1.入度为0的点肯定在s集合内 2.s集合内挑战的点肯定在集合外 3.没有被s集合内挑战过的点肯定在s集合内 那么剩下的点肯定就是无法判断在s内还是外了,所以任取一边就好了,并且上面的三种情况我们可以用dfs处理。 剩下不确定的点肯定挑...原创 2019-05-02 21:46:09 · 121 阅读 · 0 评论 -
Comet OJ - Contest #2 A-E
题目链接:https://cometoj.com/contest/37/problems A.因自过去而至的残响起舞 对于爆炸型增长的数来说,增长到x只需要log级别就ok了,所以直接暴力就好了。 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 1e5 +...原创 2019-04-29 12:34:18 · 269 阅读 · 0 评论 -
Gym - 100851F[最短路+枚举]
题目链接:https://vjudge.net/problem/Gym-100851F 解题思路: 一个明显的结论就是石头肯定是放在两个石头或者河岸之间的,所以正向跑一遍最短路,反向跑一遍最短路,然后枚举i和j中间放石头就好了。 由于相当于每个点都满边,所以只能去跑n^2最短路,不能用spfa了。 #include<bits/stdc++.h> using namesp...原创 2019-05-16 21:19:25 · 214 阅读 · 0 评论 -
国际象棋马互相攻击问题
题解思路:已知一只马可以废掉8个位置,那么最优的方法就是让多匹马废掉的位置尽量相同就可以了。#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 1e3 + 10; const int N = 101; const int dx[8] = {1,-1,2,-2,1,-1,2,-...原创 2018-03-27 21:30:44 · 875 阅读 · 0 评论 -
福建省第八届程序设计大赛专题
A:鸡兔同笼问题。小学生都会。。。 B:判断两三角形是否相交或包含或相离。那么判断一个点是否在一个多边形内的算法有多种可以看角和是不是360或者用这个点延伸一条射线看他与多边形的交点是否为奇数就行了。 #include <stdio.h> #include <cstring> #include <map> #include <string...原创 2017-07-24 18:57:34 · 331 阅读 · 0 评论 -
CodeForces - 193B-dfs
显然我们发现如果连续两次进行异或操作的抵消的,所以可以插入一对或多对二次异或操作,然后剪枝dfs就可以了。 代码: #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r原创 2017-05-07 11:30:23 · 294 阅读 · 0 评论 -
uva 11624-bfs
解题思路:本题坑爹就是着火点数量,一开始还以为只有一个。。。,先将着火点放入队列中,最后放人在的点,然后进行bfs就行了。 代码: #include #include #include #include #include #include const int mx=1e3+10,co[4][2]={1,0,0,1,-1,0,0,-1};; typedef long long ll; u原创 2017-06-02 23:56:51 · 238 阅读 · 0 评论 -
hdu 2717-bfs
解题思路:这题注意当位置大于牛位置时,x+1,x*2是不可取得,然后bfs即可。 代码: #include #include #include #include #include #include const int mx=1e5+10,co[4][2]={1,0,0,1,-1,0,0,-1},inf = 1e9; typedef long long ll; using namespa原创 2017-06-03 12:35:56 · 417 阅读 · 0 评论 -
“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-专题
题目链接:点击打开链接 说明:前五题简单题就不写了。。。 F:这是裸nlogn的求最长上升序列算法,前后各求一下取小就行了。 #include #include #include #include #include using namespace std; typedef long long ll; const int mx = 5e5+10,mod = 1e9+7; i原创 2017-07-10 19:27:32 · 583 阅读 · 2 评论 -
hdu 1181-dfs
题目链接:点击打开链接 题解:暴力dfs解决 代码:#include #include #include #include #include using namespace std; typedef long long ll; const int mx = 1e3+10; int root,tot; char str[mx]; vector vec[26]; bool vis[原创 2017-06-09 21:33:05 · 239 阅读 · 0 评论 -
“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-O题
题目链接:点击打开链接 解题思路:题目告诉我们当然主人公够聪明,但是不知道传送门是怎么对应的,那么此时可以看做只有两个操作。一:不进入传送门直接走。二:进入离出发点最近的传送门(毕竟不知道肯定是选择最近的啊)。然后用一个bfs套dfs将传送门出口作为新的出发点,看看是否能到达终点,若有一种不能则为-1. 代码: #include #include #include #incl原创 2017-07-10 10:23:23 · 644 阅读 · 0 评论 -
Codeforces Round #428 (Div. 2) - 专题
A:水题 #include #include #include #include #include #include using namespace std; typedef long long ll; #define inf 0x3f3f3f3f const int mx = 1e4+5,mod = 1e9+7; int n,m,a[mx]; int main(){ scanf("%d原创 2017-08-15 19:05:20 · 191 阅读 · 0 评论 -
hdu 6165 - 暴力dfs
题目链接:点击打开链接 题解思路:节点就1000,m就6000直接暴力肯定能过。 代码: #include #include #include #include #include using namespace std; typedef long long ll; const int mx = 1e3+10; struct node{ int y,nxt; }Ed原创 2017-08-23 18:50:52 · 251 阅读 · 0 评论 -
hdu 6162 - 暴力
题目链接:点击打开链接 题解思路:dfs一下记住父节点然后持续往上搜,知道两点相同,速度也挺快的 代码: #include using namespace std; typedef long long ll; const int mx = 1e5+10; int n,m,val[mx],head[mx],tot,fa[mx],deep[mx]; ll ans[mx]; str原创 2017-08-23 18:52:52 · 582 阅读 · 2 评论 -
hdu 5952 - dfs+优化
题目链接:点击打开链接 题解思路:一开始直接每个枚举T了,后来直接找有连接的居然过了 = =。每次看这个点是否能加入这个团,然后分加入和不加入两种情况dfs就可以了。 代码: #include using namespace std; typedef long long ll; const int mx = 1e2+10; int n,m,k,top,ans,tot,head原创 2017-11-10 20:58:24 · 260 阅读 · 0 评论 -
Wannafly挑战赛1 A-DP
题解思路: dp[x]表示以该节点为深度最低点的的路径数,dp[x][0]代表偶数个数,1代表奇数个,那么就可以递归状态转移这个过程。 代码: #include using namespace std; const int maxn = 2e5+5; typedef long long ll; ll dp[maxn][3],ans; int n; vectorvt[maxn];原创 2017-10-16 21:09:54 · 265 阅读 · 0 评论 -
2019 年百度之星·程序设计大赛 - 初赛三[1-3]
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=863 A. #include <bits/stdc++.h> using namespace std; const int mx = 2e5 + 10; const int mod = 1e9+7; typedef long long ll; i...原创 2019-08-31 15:00:46 · 262 阅读 · 0 评论