![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 60
Sirius_Ren
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇自己刮~~~
展开
-
BZOJ 3991 set维护dfs序
思路: set按照dfn排序 两点之间的距离可以O(logn)算出来 加一个点-> now ans+=dis(pre,now)+dis(now,next)-dis(pre-next); 删一个点同理 最后加上dis(begin,end)即可//By SiriusRen#include <set>#include <cstdio>#include <cstring>#include原创 2017-03-04 20:56:53 · 409 阅读 · 0 评论 -
POJ 1191 记忆化搜索
(我是不会告诉你我是抄的http://www.cnblogs.com/scau20110726/archive/2013/02/27/2936050.html这个人的)一开始没有想到要化一下方差的式子 怎么搞都挂……尴尬/*题目固定是8*8,本来想用点的坐标来表示矩形的,但是发现用标号来表示会方便一点对于最小的小方格,用(i,j)表示,即第i行第j列的小方格,注意不是点的坐标所以对于一个矩形原创 2016-10-23 17:43:49 · 210 阅读 · 0 评论 -
POJ 1985 求树的直径 两边搜OR DP
Cow Marathon DescriptionAfter hearing about the epidemic of obesity in the USA, Farmer John wants his cows to get more exercise, so he has committed to create a bovine marathon for his cows to run. Th原创 2016-04-10 12:22:54 · 650 阅读 · 0 评论 -
POJ 3669 简单BFS
标号 搜 完了……//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,t,xx[]={1,-1,0,0,0},yy[]={0,0,1,-1,0},map[666][666],vis[666][555];struct原创 2016-09-28 13:44:41 · 333 阅读 · 0 评论 -
POJ 3271 BFS (大坑)
被某人拉进了坑 完完全全被坑一天的题…… 题意: 正解思路: 先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边 然后用一个类似DP的东西把方案数加起来就搞定了 (其实 也不是很难)但是 我为什么会挂呢 首先 我想偷个懒,想少写一个BFS 就直接按照原来的边搜过去了 当然错了 查了一上午 (对着数据查 小数据竟然全水过去了!!!)下午颓了会儿原创 2016-10-14 00:25:56 · 683 阅读 · 0 评论 -
BZOJ 1193 搜索+贪心
预处理出100*100以内的最优解贪心走日判断是0*4还是2*4搞定//By SiriusRen#include <queue>#include <cstdio>#include <algorithm>using namespace std;int sx,sy,ex,ey,vis[105][105],ans;char xx[]={2,2,1,1,-1,-1,-2,-2},yy[]={1,原创 2016-10-14 00:28:12 · 273 阅读 · 0 评论 -
BZOJ 3629 约数和定理+搜索
呃呃 看到了这道题 没有任何思路…… 百度了一发题解 说要用约数和定理 就查了一发 http://baike.so.com/doc/7207502-7432191.html (不会的可以先学习一下)然后呢 我们考虑枚举约数 先线性筛一遍10^5以下的 10^5以上的数可以用已经筛过的素因数枚举最后就搜一下就好了 (记得判断=1的情况)还有 此题PE很坑爹不能有行末空格原创 2016-10-14 09:27:34 · 651 阅读 · 0 评论 -
BZOJ 1103 DFS序+线段树
思路: 先搞出来DFS序 进入这个点 +1 出这个点 -1线段树维护前缀和 (因为还要修改) 搞定 修改的时候只修改底下节点就OK了 (边权–>点权 不多说)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N原创 2016-10-15 13:32:32 · 234 阅读 · 0 评论 -
POJ 1167 The Buses 暴搜+剪枝
思路: 先把能选的路线都预处理出来 按照能停的车的多少排个序 (剪枝1) 搜搜搜 如果当前剩的车÷当前能停车的多少+deep>=ans剪掉 (剪枝2)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,vis[60],xx,cnt,ans=17;原创 2016-10-26 11:14:00 · 382 阅读 · 0 评论 -
POJ 1636 DFS+DP
思路: 先搜索出来如果选这个点 其它哪些点必须选 跑个背包就好了//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 66666int xx,yy,v[N],next[N],first[1004],tot,top,vis[1004],cas原创 2016-11-03 08:47:07 · 293 阅读 · 0 评论 -
POJ 2248 搜索
剪枝: 1.从后向前枚举 2.迭代加深 然后就0msAC了//By SiriusRen#include <cstdio>using namespace std;int n,T,s[105];bool dfs(int t){ if(s[t]==n)return 1; if(t>=T)return 0; for(int i=t;i>=1;i--){原创 2016-09-08 17:51:17 · 405 阅读 · 0 评论 -
POJ 2110 二分+暴搜
题意: 给你一个矩阵 ,你能往各个方向走(不走出去就行),每次只能上下左右走一格,问路径上的点权最大值和最小值的差最小是多少。 思路: 首先 二分最后的答案, 暴力枚举当前的区间是啥。 DFS 就OK 了 (我的代码可能有点儿小问题…… 枚举的时候没有判左上角的点) (但是AC了哈哈哈)//By SiriusRen#include <cstdio>#include <cstr原创 2016-09-14 23:42:54 · 646 阅读 · 0 评论 -
BZOJ 1024 SCOI2009 生日快乐 暴搜
思路:eng。。。按照题意搜就好了 (一定要注意题面的n<=10……) 枚举断点。。。反正n<=10不怂//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,m,k;double ans=0x3fffffff,area;double dfs(double x,double y,in原创 2016-09-14 23:58:27 · 270 阅读 · 0 评论 -
POJ 1945 暴搜+打表 (Or 暴搜+判重)
思路:呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直接判重就好了 打表: 打表的程序:// by SiriusRen#include <queue>#include <cstdio>#include <algorithm>using原创 2016-08-25 23:08:21 · 3606 阅读 · 0 评论 -
POJ 1950暴搜
思路: 暴力枚举好了。。每回判断一下……用long long会超时 但是10^20会爆int。。。 不过仔细想一想 超过10^9的数肯定拼不回0啊…… 猥琐用int AC了// by SiriusRen#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int n,s[16],c原创 2016-08-26 11:06:56 · 259 阅读 · 0 评论 -
NOIP 2014 寻找道路
思路: 反向建边 看能到哪儿再正向搞 我傻乎乎地最后竟然用了Dijkstra 普通BFS就可以//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 250000struct node{int at,we原创 2016-09-05 21:28:37 · 486 阅读 · 0 评论 -
TYVJ 1541 八数码
Orz双向搜索的cy大神我用的是hash 也蛮快的//By SiriusRen#include <queue>#include <cstdio>using namespace std;#define mod 1000007struct node{char a[4][4],cnt;}a,b;char xx[]={1,-1,0,0},yy[]={0,0,1,-1};int vis[1000原创 2016-09-05 21:29:37 · 321 阅读 · 0 评论 -
POJ 2132 暴搜OR Floyd
题意: 给你一个邻接矩阵(n<=25)问所有1到2路径的gcd的lcm是多少。 一些经验(WA/TLE的经验): 1. 无脑暴搜是会TLE的……. 2. 关于精度 dyf神牛说了:long long就能过 (何必再写个高精呢)3. 是不是只有我智障把LCM写错了……思路:暴搜+剪枝 显然的剪枝:若已得的LCM能够除得尽当前解。剪掉。(gcd&lcm的性质) 然后就32ms原创 2016-08-26 22:12:48 · 549 阅读 · 0 评论 -
TYVJ 1340 折半暴搜+二分
思路: 1. 这 题 不卡常过不去啊…… (先加一个random_shuffle) 首先 我们可以折半 搜这一半可以到达的重量 sort一遍然后搜另一半 对于路程中每一个解 我们可以二分前一半中加这个解最接近w的值,更新ans剪枝: 对于第一次搜索 显然的剪枝:和不能大于w 对于第二次搜索 如果当前的解小于最大的remain 退出我的搜索纯凭运气&数据…… 数据和w相差比较原创 2016-09-08 17:23:53 · 562 阅读 · 2 评论 -
POJ 3256 DFS水题
枚举点 每次都搜一遍//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 20005int ans,k,n,m,first[N],next[N],v[N],tot,xx,yy,mark[N],vis[1005];void add(int x,原创 2016-10-26 11:16:18 · 314 阅读 · 0 评论 -
POJ 3626 BFS
思路:easy BFS//By SiriusRen#include <queue>#include <cstdio>#include <algorithm>using namespace std;queue<pair<int,int> >q; int x,y,jyx,jyy,n,xx[]={1,-1,0,0},yy[]={0,0,1,-1},vis[1555][1555];bool m原创 2016-10-17 09:51:27 · 328 阅读 · 0 评论 -
POJ 2457 BFS
题意: 说人话: 从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 ) 如果不能到达 输出-1 思路: 搜//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 100500i原创 2016-10-29 16:04:39 · 577 阅读 · 0 评论 -
POJ 3172 (认真读题的题)
题目: 思路:题目很有意思首先 题里说:N<=1000 题里又说 诶呦 woc? 这不自相矛盾嘛 最坏情况也就是个 斐波那契数列 几十个数 暴搜+剪枝不就好了嘛剪枝:从大往小搜,如果前缀和+当前的和<=当前解 return(这正确性很显然 但是不是很好想到)//By SiriusRen#include <cstdio>using namespace原创 2016-10-30 00:32:22 · 367 阅读 · 0 评论 -
POJ 2133 暴搜
题意: 思路: 按照题意暴搜注意 如果目标串==给的串 答案是2 //By SiriurRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,k,goal,a[1005],head,tail,q[1000000],vis[1<<16],minn[17],rec[原创 2016-10-30 21:35:14 · 399 阅读 · 0 评论 -
POJ 2138 最长路
思路: 如果j能由i得到 则i向j连一条边答案就是最长路的末节点所代表的string//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 3005int n,first[N],next[N*N],v[N*N],tot=1,t,head,ta原创 2016-10-30 23:06:25 · 324 阅读 · 0 评论 -
BZOJ 4034 线段树+DFS序
思路: 先搞出来每个点的DFS序 (要有入栈和出栈两种状态的) 处理出来 线段树区间有多少入栈的和多少出栈的加区间的时候就加(入-出)*wei查前缀和//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 200050#define int原创 2016-11-11 17:08:00 · 597 阅读 · 0 评论 -
POJ 3204 网络流的必须边
思路: 求一遍网络流 在残余网络上DFS 从起点DFS 从终点把边反向DFS 一个边跟起点连通 跟终点反向的边连通 ans++注:此题不能用tarjan 因为有边权为0的边 //By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace s原创 2016-12-28 15:21:37 · 345 阅读 · 0 评论 -
BZOJ 1989 概率相关
思路: 一条边免费的概率为 (经过它的路/总路径条数)^2 DFS即可有个地方没有用 long long炸了好久…//By SiriusRen#include <cstdio>using namespace std;const int N=20050;int n,m,xx,yy,first[N],next[N],v[N],tot,size[N];typedef long long ll原创 2017-01-29 22:07:24 · 465 阅读 · 0 评论 -
BZOJ 2819 DFS序+线段树
非递归的DFS写炸了… 交了一个递归版的 过了………..//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=1000050;int n,nn,q,xx,yy,stk[N],in[N],out[N],top,cnt,tree[N*4];i原创 2017-01-31 12:58:54 · 401 阅读 · 0 评论 -
POJ 2458 DFS+判重
题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得….)//By SiriusRen#include <bitset>#include <cstdio>0using namespace std;bitset<134217728>bit;char s[17][17],vis[17][17],xx[]={1,-1,0,0},yy[]={0,0,1,-1};i原创 2016-10-29 15:44:58 · 774 阅读 · 0 评论 -
BZOJ 1082 暴搜
思路: //By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,m,st=1,a[6666],b[6666],l,r,ans,vis[6666],Mid,tot,sum[6666];bool dfs(int x,int pos,int waste){原创 2016-11-10 11:56:38 · 358 阅读 · 0 评论 -
POJ 3039 搜索??? (逼近)
思路: 抄的题解这叫搜索?难以理解我觉得就是枚举+逼近//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,recx,recy,x,y;int gcd(int a,int b){ return b?gcd(b,原创 2016-10-27 19:54:55 · 663 阅读 · 0 评论 -
POJ 3051 DFS
题意:判断连通块大小 水题//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,m,a[1111][88],xx[]={1,-1,0,0},yy[]={0,0,1,-1},vis[1111][88],ans,temp;void dfs(int x,i原创 2016-10-28 13:05:09 · 663 阅读 · 0 评论 -
POJ 3050 枚举+dfs+set判重
思路: 枚举+搜一下+判个重 ==AC//By SiriusRen#include <set>#include <cstdio>using namespace std;int a[8][8],xx[]={1,-1,0,0},yy[]={0,0,1,-1};set<int>s;bool check(int x,int y){ return x>0&&x<6&&y>0&&y<6;原创 2016-10-28 13:12:19 · 592 阅读 · 0 评论 -
POJ 3049 DFS
思路:暴搜//By SiriusRen#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int l,c,yuan,fu,lenth;char a[16],s[16];bool Yuan(char x){ if(x=='a'||x=='e'||x=='i'||x=='o'||x=原创 2016-10-28 13:25:36 · 444 阅读 · 0 评论 -
BZOJ 1306 DFS
思路: 搜索就好(注意不要枚举太多东西)//By SiriusRen#include <cstdio>using namespace std;int n,point[10],ans[10][10],answer;bool check(){ for(int i=1;i<=n;i++) if(point[i])return 0; return 1;}void原创 2016-11-09 19:46:30 · 352 阅读 · 0 评论 -
POJ 3321 DFS序+线段树
思路: 先DFS一遍 对于每一个点 找到begin 和end(DFS进的时候的cnt 和出的时候的cnt)每回修改的时候 改begin上边的权值 查的时候查 [begin,end]呃 如果我说得不清楚 请看http://blog.csdn.net/zhang20072844/article/details/6703432//By SiriusRen#include <cstdi原创 2016-11-09 17:06:23 · 561 阅读 · 0 评论 -
HDU 5883 欧拉回路
题面: 思路:这里面有坑啊啊啊….. 先普及一下姿势:判断无向图欧拉路的方法: 图连通,只有两个顶点是奇数度,其余都是偶数度的。判断无向图欧拉回路的方法: 图连通,所有顶点都是偶数度。重点:图连通!!思路: 先看看图是否联通(就是所有边都能经过么) 再判判是不是欧拉路 经过的次数=(du[i]+1)/2 如果是欧拉回路:枚举起点 再异或一下 不是:输出当前解就酱~//B原创 2016-10-06 20:20:45 · 226 阅读 · 0 评论 -
POJ 2227 FloodFill (priority_queue)
题意: 思路: 搞一个priority_queue 先把边界加进去 不断取最小的 向中间扩散//By SiriusRen#include <queue>#include <cstdio>#include <cstring>using namespace std;#define int long longstruct Node{int h,x,y;Node(int a,原创 2016-10-29 09:01:00 · 350 阅读 · 0 评论 -
POJ 4007 Flood-it!
题目:http://poj.org/problem?id=4007思路: (lyd学长的思路) IDA*算法,首先迭代加深限制搜索深度。 可以发现如果当前矩阵中除了左上角的连通块之外,共有M种颜色,那么还需要的步数不小于M。如果当前搜索深度+估价函数的值>深度限制,可以剪枝。 如果改变颜色后,左上角格子所在的联通块大小没有改变,可以剪枝,避免来回往复地搜索。 每次寻找左上角的格子所在的连通原创 2016-09-08 23:15:37 · 480 阅读 · 0 评论