搜索
文章平均质量分 80
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
csu1508 地图的四着色(剪枝+BFS DFS)
题意:中文题 思路:首先男女各人用两种颜色,那么用A不用B和用B不用A时候的方案数是等价的,那么我们可以强行固定男先用A染色,女生先用C染色,最后方案数*4就是最后总的方案数。先用DFS/BFS把相同的城市标号,然后再次DFS/BFS把图的领接矩阵构造出来,然后再遍历一遍把邻接表构造出来。 使用邻接表是因为可以快速地查找与它相邻的城市,而先构造邻接矩阵是因为要判重,然后直原创 2017-01-17 16:29:24 · 610 阅读 · 0 评论 -
HDU 4771 Stealing Harry Potter's Precious(BFS)
思路:由于珠宝只有4个...所以直接枚举一个全排列然后暴力的BFS就好了 #include using namespace std; #define INF 1e9 int p[105]; int n,m,k; char mp[105][105]; int vis[105][105]; int sx,sy; int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}原创 2016-06-08 15:34:47 · 406 阅读 · 0 评论 -
hdu4707 Pet
思路:简单的DFS一波就好了 #include using namespace std; const int maxn = 1e5+100; vectore[maxn]; int n,d,cnt; int vis[maxn]; void dfs(int root,int v) { if(v>d) return; vis[root]=1; cnt++; for(int i =原创 2016-05-20 15:57:52 · 513 阅读 · 0 评论 -
HDU 5113 Black And White(搜索+剪枝)
题意:给你一个不超过5X5的矩阵,有k种颜色,每种颜色有c[i]个,问可不可以把格子颜色涂满并且相邻格子的颜色不相同 思路:DFS搜索,不过会超时,留意到一个剪枝就是如果当前没有涂色的格子数目/2比最多还没涂的颜色数量小的话就可以直接返回了,因为肯定会相邻了 #include using namespace std; int n,m,k; int mp[6][6]; int color原创 2016-05-07 22:00:02 · 771 阅读 · 0 评论 -
CodeForces 9C Hexadecimal's Numbers(DFS)
题意:给你n,问你从1到n有几个数字只由0和1组成 思路:DFS一波 #include using namespace std; map vis; #define LL long long LL ans = 0; int n; void dfs(int x) { if (x>n) return; if (vis[x]) return; vis[x]=1; ans+原创 2016-04-23 08:40:34 · 464 阅读 · 0 评论 -
POJ 2110 Mountain Walking(二分+BFS)
思路:二分高度差mid且我们枚举的是区间上下界up和low.(mid=up-low),对于一个区间[low,up]我们用BFS找,看看能不能找到一条从左上角到右下角的路,且路中走过的所有节点的高度值x都属于区间[low,up]. #include #include #include #include using namespace std; const int maxn=105; int原创 2016-05-17 22:29:29 · 746 阅读 · 0 评论 -
CodeForces 611B New Year and Old Property(DFS)
题意:给你l,r区间,问你[l,r]中,二进制中只含有1个0的数有多少个 思路:直接dfs跑,dfs(int x,int flag)表示现在是x,这个数里面是否只含有1个0。 #include using namespace std; #define LL long long LL l,r,ans; void dfs(LL num,int flag) { if (num>r)原创 2016-05-15 15:02:59 · 535 阅读 · 0 评论 -
CodeForces 510B Fox And Two Dots(DFS)
题意:给你一个n*m的网格,然后问你是否有只含有一种元素的环 思路:记录一下DFS即可 #include using namespace std; int n,m,flag; char mp[55][55]; int vis[55][55]; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(int x,int y,char col原创 2016-05-15 15:00:34 · 321 阅读 · 0 评论 -
CodeForces 55B Smallest number(DFS)
题意:给你4个数,然后给你三个符号,问你怎么安排着4个数的顺序,可以使得最后的答案最小,4个数和三个符号,选两个数和第一个符号出来,得到一个数,3个数和2个符号,选两个数和第二个符号出来,得到一个数,2个数和1个符号,得到答案,要求使得答案最小 思路:直接爆搜就好了 #include using namespace std; #define LL long long char s[4]原创 2016-05-15 14:56:30 · 803 阅读 · 0 评论 -
HDU 5444 Elven Postman
思路:这不是一颗裸的排序二叉树么...直接DFS就好啦 #include using namespace std; struct Node { int data; Node*lson; Node*rson; Node(){} Node(int x) { data = x; lson = rson = NULL; } }; void build(Node *root原创 2016-05-15 14:51:43 · 370 阅读 · 0 评论 -
BZOJ 1024 生日快乐(DFS)
思路:直接dfs(x,y,n)表示现在矩形长和宽分别为x,y,还剩下n刀没砍,有一个贪心就是,肯定更加均匀砍下去,所以按照这样子直接dfs就好了 #include using namespace std; int x,y,n; double dfs(double x,double y,int k) { if (k==1) { return max(x,y)/min(x,y);原创 2016-05-15 14:49:30 · 322 阅读 · 0 评论 -
CodeForces 559B Equivalent Strings
思路:不停分治就好啦 #include using namespace std; const int maxn = 200005; char a[maxn],b[maxn]; bool cmp(char a[],char b[],int len) { bool isok = 1; for (int i = 0;i<len;i++) if (a[i]!=b[i]) isok=原创 2016-05-15 14:47:53 · 472 阅读 · 0 评论 -
CodeForces 638C Road Improvements
题意:给你一棵树,n点n-1条边,现在这些边都不存在,你要修起来,你可以选择一条边修理,如果这个边的两边的城市都没有在修理其他边的话。每次修理需要一天的时间。问你最少多少天可以修完,并且把方案输出。 思路:dfs一波 #include using namespace std; const int maxn = 2e5+10; vector >e[maxn]; vectorans[max原创 2016-04-19 21:48:39 · 379 阅读 · 0 评论 -
HDU 4740 The Donkey of Gui Zhou
思路:模拟搜索 #include using namespace std; const int maxn = 1005; int donkey[maxn][maxn]; int tiger[maxn][maxn]; int flag; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int don,tig,n; void dfs(int a,int原创 2016-05-03 20:26:38 · 431 阅读 · 0 评论 -
CodeForces 659E New Reform
题意:给你一个无向图,现在要求你把边改成有向的, 使得入度为0的点最少,输出有多少个点入度为0 思路:脑补一波结论,如果有环的话显然没有点入度为0,其余则至少有一个点入度为0,然后就DFS一波就可以了 #include #include #include #include #include #include #include #include #include #in原创 2016-04-01 21:53:17 · 1138 阅读 · 2 评论 -
HDU 5546 Ancient Go(DFS)
思路:找一个连通块如果它只能往外扩展一个空格的话那么就满足题意,所以直接DFS一波就好了 #include using namespace std; char mp[20][20]; int vis[20][20]; int dx[] = {0,0,-1,1}; int dy[] = {1,-1,0,0}; int cnt = 0; int num = 0; void dfs(int x原创 2016-07-25 19:53:27 · 512 阅读 · 0 评论 -
天梯赛 L3-008. 喊山 (BFS)
思路:BFS,如果深度一样则记录每一层最小的顶点 #include using namespace std; const int maxn = 10005; int n,m,k; vectore[maxn]; int vis[maxn]; struct Node { int id; int deep; Node(){}; Node(int idd,int deepp):id(id原创 2016-07-15 14:14:25 · 721 阅读 · 2 评论 -
HihoCoder 1426 What a Ridiculous Election (BFS)
思路:预处理12345能到达所有情况的最小步数即可 #include #include #include #include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define esp 1e-9 typedef原创 2016-11-23 19:22:01 · 694 阅读 · 0 评论 -
CodeForces 586D Phillip and Trains(搜索)
思路:人走一步之后可以选择不动,向上,向下,然后车会从右往左走两格,相对的相当于人走两格,直接BFS或者DFS一下就可以了,注意判定的顺序是先向右走一格,然后再选个方向走两格 #include using namespace std; const int maxn=105; int n,k,ans; char mp[3][maxn]; int vis[3][maxn]; int dfs(原创 2016-11-21 21:36:59 · 536 阅读 · 0 评论 -
哈理工第六届程序设计大赛 G 逃脱(BFS)
思路:一开始我预处理了每个格子被火燃烧的最短时间然后BFS,WA到不能自理,后来没预处理直接都扔进队列里就A了。。。 #include using namespace std; const int maxn = 35; struct Node { int x,y,w; int flag; Node() { w=0; } }; int n,m; int vis[maxn][m原创 2016-11-20 21:11:44 · 779 阅读 · 1 评论 -
hdu5952 Counting Cliques(搜索)
题意:求一个图中点数为S的完全子图个数 思路:直接搜,一个强剪枝就是只连单向边,可以减少一半规模的搜索 #include using namespace std; const int maxn = 105; vectore[maxn]; int mp[maxn][maxn]; int n,m,s,ans; void dfs(int u,int *tmp,int siz) { if(s原创 2016-11-29 20:53:05 · 691 阅读 · 0 评论 -
hdu5961 传递(BFS)
思路:根据题目一开始猜想感觉边数越多,越难成立,就直接n^3。。T成狗,根据题目给的性质,其实就是对每个点进行BFS,如果途中有某个点的深度>=2那么就是不成立的了。。复杂度n^2 #include using namespace std; const int maxn = 2100; vectore[maxn][2]; int d[maxn]; char str[maxn]; int原创 2016-11-05 21:08:50 · 1148 阅读 · 0 评论 -
Codeforces Round #228 (Div. 2) B Fox and Cross(DFS)
思路:爆搜即可 #include using namespace std; const int maxn = 105; int dir[5][2]={{0,0},{1,-1},{1,0},{1,1},{2,0}}; int n; char mp[maxn][maxn]; int vis[maxn][maxn]; bool dfs(int x, int y) { if (y == n原创 2016-09-07 09:10:42 · 291 阅读 · 0 评论 -
hdu5887 Herbs Gathering(搜索)
思路:100个物品的背包问题,其他数值都在1e9 迷之剪枝:维护两个前缀和,如果后面能取完的就直接取完,如果后面能获得的最大价值加上已有的都没有比现在的答案更优那么返回。按照体积由大到小排序,其他排序方法都会T?这是为什么呢 #include using namespace std; const int maxn = 105; #define LL long long int n,V;原创 2016-09-18 21:10:57 · 1135 阅读 · 0 评论 -
HDU 1043 Eight(BFS)
思路:八数码问题首先要会康托展开来表示它的状态,根据逆序数直接判断有无解,对于一个八数码,依次排列之后,每次是将空位和相邻位进行调换,研究后会发现,每次调换,逆序数增幅都为偶数,也就是不改变奇偶性,所以只需要根据初始和目标状态的逆序数正负判断即可。估价函数H:是根据与目标解的曼哈顿距离,也就是每个数字与目标位置的曼哈顿距离之和。 #include using namespace原创 2016-08-11 00:27:41 · 454 阅读 · 0 评论 -
HDU 2181 哈密顿绕行世界问题(搜索)
思路:原来这是个搜索水题.... #include using namespace std; int mp[25][25]; int vis[30]; int ans[30]; int cnt = 1,m; void dfs(int p,int num) { ans[num]=p; if(num==20 && mp[p][m]) { printf("%d: ",cnt++);原创 2016-08-11 00:24:48 · 302 阅读 · 0 评论 -
hdu5469 Antonidas(DFS)
思路:直接找到开头的那个结点,然后往子树搜或者父亲结点搜...一个可行的剪枝是如果子树剩下的最大高度小于需要匹配的字符数目的话就肯定没有解了...然后就水过去了... #include using namespace std; const int maxn = 1e4+7; vectore[maxn]; int n,tarlen; int dep[maxn],vis[maxn],f[ma原创 2016-09-10 08:54:37 · 378 阅读 · 0 评论 -
hdu5802 Windows 10(贪心搜索)
思路:30w个样例1s...完全没有往搜索那个方面去想,一直想找一下规律...智障啊... 题解: _您可能是正版Windows 10的受害者_ 直接贪心就好 比较直观的看法是使劲往下降,然后升回来 或者使劲往下降然后停顿然后再使劲往下降。。。 于是就能将问题变成一个子问题,然后dfs就好 需要注意的是由于按up键也可以打断连续向下的功效 所以应该记录停顿原创 2016-08-04 21:59:02 · 537 阅读 · 0 评论 -
Codeforces Round #357 (Div. 2) D Gifts by the List(DFS)
思路:留意到一个性质,如果a想送礼物的对象不是自己或者不是和祖先一样的话那么就可以直接判-1,因为如果a想送给b的话那么必须a到b中间所有都送给b。证明就是比如a->b->c->d,如果a想送给d,b想送给c的话,显然就不成立了。然后就是dfs一波就可以了 #include using namespace std; const int maxn = 1e6+7; int a[maxn];原创 2016-07-08 11:24:36 · 425 阅读 · 0 评论 -
天梯赛 L3-004. 肿瘤诊断(BFS)
思路:三维的BFS #include using namespace std; int dx[6]={1,-1,0,0,0,0}; int dy[6]={0,0,1,-1,0,0}; int dz[6]={0,0,0,0,1,-1}; int mapp[1500][250][70]; int ans = 0; int vis[1500][250][70]; int n,m,l,t; st原创 2016-07-15 14:15:36 · 1231 阅读 · 0 评论 -
HDU 4739 Zhuge Liang's Mines
题意:给n个点找正方形 思路:直接DFS #include using namespace std; const int maxn = 40; int n,ans; int vis[maxn]; struct point { int x,y; }points[maxn]; bool cmp(const point a,const point b) { if (a.x!=b.x)原创 2016-05-03 20:25:12 · 423 阅读 · 0 评论 -
Codeforces Round #354 (Div. 2) D Theseus and labyrinth
思路:非常恶心的BFS...相当于分了四层的图 #include using namespace std; char rot(char x) { if (x=='*' || x=='+') return x; if (x=='>') return 'v'; if (x=='<') return '^'; if原创 2016-05-26 22:10:11 · 365 阅读 · 0 评论 -
UVA11624 Fire BFS
题解简单BFS,先对火(可能不止一个)进行BFS求出每个格子最快蔓延的时间,然后再对人进行BFS即可,居然没留意到到了边界之后步数还要+1,WA之后改了好久…代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #inclu原创 2015-12-14 21:12:20 · 342 阅读 · 0 评论 -
LightOJ 1175 (BFS)
题解:这不是和UVA11624 Fire一样的题..只是换了背景而已,先对火(可能不止一个)进行BFS求出每个格子最快蔓延的时间,然后再对人进行BFS即可,留意到到了边界之后步数还要+1代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <alg原创 2016-01-18 14:12:32 · 478 阅读 · 0 评论 -
HDU1240 Asteroids!(BFS)
题解:三维BFS,和胜利大逃亡差不多代码#include <string.h> #include <stdio.h> #include <queue> using namespace std;char map[20][20][20]; int vis[20][20][20]; int n; int sx,sy,sz; int ex,ey,ez; int tx[] = {1,-1,0,0,0,0};原创 2016-01-18 13:35:26 · 357 阅读 · 0 评论 -
FZU2150 Fire Game(BFS)
题解题意 :就是有两个熊孩子要把一个正方形上的草都给烧掉,他俩同时放火烧,烧第一块的时候是不花时间的,每一块着火的都可以在下一秒烧向上下左右四块#代表草地,.代表着不能烧的。问你最少花多少时间可以烧掉,如果烧不掉就输出-1直接遇到草就加入队伍中,然后BFS,再暴力枚举两个草丛求最小代码#include <cstdio> #include <queue> #include <cstring> #inc原创 2015-12-15 21:06:52 · 370 阅读 · 0 评论 -
POJ1426 Find The Multiple DFS
题解:题目给你一个n,然后让你用0和1组成的十进制数如果能满足这个数%n==0就可以输出,因为n最多有到200,所以一开始并不知道是不是要大数了…后来发现用unsigned long long 就可以,具体的看代码吧代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib原创 2015-12-15 22:17:41 · 292 阅读 · 0 评论 -
POJ3278 Catch That Cow 简单BFS
题解:简单的BFS,就不说什么了,唯一注意的是要判断是不是越界了代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include <vector> #include <map> #include <string> #i原创 2015-12-14 08:28:28 · 316 阅读 · 0 评论 -
POJ3984 迷宫问题 BFS记录路径
题解中文题…求从(0,0)到(4,4)的最短路,并且输出路径,一开始想用STL做,发现不知道怎么记录输出路径,所以只能改成了自己写一个队列来用,有点陌生。代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include原创 2015-12-14 19:07:12 · 375 阅读 · 0 评论 -
HDU2612 Find a way BFS
题解:M和Y约在KFC见面,问两个人去到同一家KFC所用的最短时间,直接求出M和Y到所有点的最短时间,然后枚举到KFC的最小值即可代码#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <vector> #include <map> #include原创 2015-12-14 19:56:18 · 383 阅读 · 0 评论