
算法
文章平均质量分 61
凉秋girl
保持学习应该是最难的一件事吧?
展开
-
多源最短路径+源码<floyed>
the reason of failure:1、第一次的时候,给输入input的i2、第二次是由于输入的少一个%d。how to solve:修改 question: where is difficult:基础 key point:把每个边都初始化为-1,然后把所有题目给的能走的边储存。通过三层循环,找出到达某个结点的最短路径,没找到一个就代替之前的路径。即本来输入的是 1原创 2016-11-16 15:01:01 · 309 阅读 · 0 评论 -
ZOJ 2334 可并堆<斜堆>
thinking:1、可以为大根堆或者小根堆,相当于优先队列,但是有合并这个功能关键代码是int merge(int x,int y){if(tree[x].weight==0)return y;if(tree[y].weight==0)return x;if(tree[x].weighttree[x].rch=merge(tree[x].rch,y);swap(x,y原创 2016-12-25 18:15:00 · 336 阅读 · 0 评论 -
HDU 2255 (KM算法)
the reason of failure:1、超时,while(scanf(%d,&n))是错误的写法,而里面改为cin则为正确的了,但是while(scanf("%d,&n)==1)是正确的。thinking:输入例子:421 8 9 1317 15 34 1916 22 51 4332 17 18 22就是先把lx初始化为每行的最大值,lx[1]=21,l原创 2017-02-18 18:21:03 · 284 阅读 · 0 评论 -
二维树状数组
不用++的话一直超时,也不知道为什么~没找出问题As the name says, this problem is about finding the number of points in a rectangle whose sides are parallel to axis. All the points and rectangles consist of 2D Cartesia原创 2017-01-26 20:50:46 · 196 阅读 · 0 评论 -
POJ 1611 <并查集>
thinking:把所有在一个组的学生连到一棵树(注意如果一组多人如5人是如何输入到一棵树上),然后判断多少个结点的根结点与0的根结点相同,最后输出总数+1.DescriptionSevere acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized a原创 2016-12-06 19:26:50 · 205 阅读 · 0 评论 -
分治,在平面上找距离最近的两个点
#include #include #include #include #include #include using namespace std;const double eps = 1e-8;const int INF = 0x7fffffff;int n;struct Point{ double x,y;}p[200000+5];Point temp[20原创 2017-08-09 00:25:39 · 4262 阅读 · 0 评论 -
CodeForces 471D<差分+KMP>--scanf的读入远比cin快
thinking:用在数据庞大时scanf的读入速度远远比cin快速,这里就快了十倍.题意:DescriptionPolar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of Kiev got hold of lots of wood原创 2016-12-04 22:31:40 · 328 阅读 · 0 评论 -
ACM训练_week1_2
codeforces上gym的一场,三题,菜到爆炸,打到现在还出不了什么题2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)K(二分+小数据枚举):题意上由3种人,每种人有一个不同的速度值vi,每种人分别又有k个,然后有总人数/2点划艇数,每个划艇有一个常数b,每两个人需要在一个划艇上面有一个速度值V=b*(v1...原创 2018-05-27 22:02:24 · 189 阅读 · 0 评论 -
2018年模板大集合!!!!没有一个优秀的模板就是等着被摩擦
离散化模板://把需要离散化的内容进行排序,去重,然后getid为取得这个值的下标sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end()); //这里记得需要排序才可以去重int getid(int x){ return lower_bound(v.begin(),v.end(),x)-v.begin()+1...原创 2018-05-27 22:04:07 · 506 阅读 · 0 评论 -
北京网络赛(菜的一批
补了一下模拟题:1:注意越界的可能,会出现任何错误,所以请确保所有下标不会越界2:注意每个变量的含义,每一行是否是这个变量!!!!!3:细心+耐心+好好训练+没时间了#include<bits/stdc++.h>using namespace std;const int maxn=1e5+7;typedef long long ll;char s1[300];...原创 2018-09-23 17:44:18 · 181 阅读 · 0 评论 -
世界树(虚树,坑
坑了四天的虚树,终于过了,也对treeDP印象深刻了些,这里挖个坑(基环树DP,该搞搞了坑点1:两个点直接要的不仅仅的路径长度,而是路径上的所有点,那么应该是儿子数相减坑点2:两个点在st表查找的时候可能会超边界,因为mid不一定在链上坑点3:找某个点属于哪个点归属的时候,更新必须加入队列中,不然其后面的点不一定会改变值。#include<bits/stdc++.h>...原创 2018-09-19 18:32:13 · 497 阅读 · 0 评论 -
2018年模板大集合!!!!没有一个优秀的模板就是等着被摩擦[常识部分]
常见数据范围(注意即便unsigned不溢出结果,中间运算也可能溢出结果):unsigned int 0~4294967295 int -2147483648~2147483647 long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:1844...原创 2018-09-26 10:31:12 · 390 阅读 · 0 评论 -
基环树入门
需要强调点是基环树可能是个森林。1.对一个n点n边的图找出任意两点不想连的最大全值,相当于最大权独立集:dps找到环的位置,然后求得环中某个位置点头u和尾v,分别按树跑一次dp,max(dp[u][0],dp[v][0])就是最大值因为v与u必定不要一个,求不要其中一个的最大值就是结果#include<bits/stdc++.h>using namespace st...原创 2018-09-26 11:30:32 · 1849 阅读 · 0 评论 -
2018年模板大集合!!!!没有一个优秀的模板就是等着被摩擦[DP部分]
日常wa点:1.dp时for的i是从大到小还是从小到大,注意是否影响后续性质。12.单调队列如果值受到i的影响,那么应该把结果都存下来,而不是只单纯考虑最有值,因为有可能后面进来点会超前面。13.基环树注意多个森林。14.DP[i]=DP[i-j*w[i]]+xxx可以变成dp[i]=dp[j+w[i]*k]+xxx的形式5.使用1<<n,的时候注意如果n可以大于3...原创 2018-09-26 11:32:51 · 368 阅读 · 0 评论 -
2018年模板大集合!!!!没有一个优秀的模板就是等着被摩擦[数据结构]
1、考虑分块用vector存每个块的元素,这样使得快为可变大小同时如果块过大就重构这个块cdq(树状数组维护的三维偏序问题):void cdq(int l,int r){ if(l==r) return ; int mid=(l+r)>>1; cdq(l,mid);cdq(mid+1,r); int i=l,j=mid+1,p=l; w...原创 2018-09-27 11:19:00 · 245 阅读 · 0 评论 -
2018年模板大集合!!!!没有一个优秀的模板就是等着被摩擦[网络流]
常见套路:1、数据范围<=5000都敢跑网络流。2、(二分结果)/(转换为判断性问题枚举)跑网络流。3、利用分层图的思想建模型(最长上升子序列)4、最大权闭合子图和最小路径覆盖两种模型5、像dp的网络流,可以拆点,如果某个点的流量有2种去处,不妨拆点免费流量(餐巾问题)a、不存在孤立点的图,最大匹配+最小边覆盖=Vb、最大独立集+最小顶点覆盖=Vdinic网络...原创 2018-10-04 23:15:00 · 383 阅读 · 0 评论 -
最优二叉树<哈夫曼树>
thinking:找到2个最小值的点,将其的值加起来成一个新结点的值,然后这个新结点是这两个结点的父节点,然后再在这些结点(父结点)中选择2个接着连成一个父结点,依次循环就可以构造出一个哈夫曼树了。the reason of failure:1、(AA&&BB||CC)与(AA&&(BB||CC))意义是不一样的。2、得写一个walked来记录哪个结点已经被选择过了而不能再次被选择。代原创 2016-12-23 20:34:02 · 625 阅读 · 0 评论 -
***快排sort与qsort的使用
sort是用来排序值,用>号。而qsort是通过指针的对比。代码:#include using namespace std;int cmp1(const void *a,const void *b){ return *(int*)a-*(int*)b; //qsort的使用,a-b为从小到大排序; }bool complare(int a,int b){原创 2016-11-20 22:24:57 · 1218 阅读 · 0 评论 -
上机题目<构造表达式>
thinking: 开一个数组,将每个数字中间空出来,然后通过用DFS枚举全部可能填补这个空出来的位子,然后把每次出现的数组可能进行计算,如果是0则+1。important point:int dfs(int t){ int i,j; if(t>n*2-2)jisuan(); else for(j=-1;j>-4;j--){ // cout << "i=" << i << "原创 2016-12-23 12:32:24 · 283 阅读 · 0 评论 -
Abbott的复仇(Abbott's Revenge, ACM/ICPC World Finals 2000, UVa 816)<经典BFS>
the reason of failure:1、各种坑坑洼洼的修改。2、在第一个dir上,已经将其转换为数字了,就不该在计算时又转换一次how to solve:对着正确的一遍又一遍找错误,最后自己不看答案完整写出question:where is difficult:key point:1、BFS的使用方法。2、strchr的使用(const char *原创 2016-11-13 14:32:15 · 1016 阅读 · 0 评论 -
单源最短路径<Dijkstra>
由一个源头,也就是n1开始到n2。f[?]代表从终点到?的距离,刚开始f[n2]就是确定了终点,然后每个f[?]为距离需要弄明白map的判断那里#include #include #define maxn 9999using namespace std;int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w原创 2016-11-16 23:37:43 · 378 阅读 · 0 评论 -
poj3278 <BFS/DFS>
the reason of falure:1、记得不能给数组A[负数]赋值,会running error2、定义数组应该在头文件那#define MAXN 9999然后定义的全局变量thinking:1、从8个方向都探索,如果有W则给打上标记,放入队列.2、从8个方向都搜索,当有W则打上标记,马上从这个打上标记的W开始搜索下一个DescriptionDue原创 2016-11-29 23:49:14 · 560 阅读 · 0 评论 -
POJ 3984 迷宫问题<记忆BFS>
the reason of failure:1、一遍过important points:1、迷宫题如何记录该格子的上一个是哪个?可以通过定义一个A[d.x][d.y].x=c.x,可以通过定义一个A[d.x][d.y].y=c.y.c是从哪个格子,d为所到的格子.然后再用一个数组储存,逆序输出便为路径.thinking:bfsE - A strange lift原创 2016-11-30 11:56:36 · 261 阅读 · 0 评论 -
HDU 1372<记忆BFS找最短路径>
the reason of failure:1、内存使用过多(把数组大小减小).thinking:象棋题,马走日,给定2个点,问马如何最快达到终点.记忆BFSDescriptionA friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find th原创 2016-12-01 08:25:56 · 288 阅读 · 0 评论 -
最小生成树<prim>
1、刚开始把从点1到每个能连同的点赋值给lowcost[?],然后用mst[1]储存是从1连接过去的。2、然后找出这些lowcost的最小值,然后连接第一条边。3、通过mst[[知道这条边是从1连接过去的,然后找这条边的另一个点,从这个点开始用map[][]找出其连的边中(如到5)是否比1到5小,如果比1到5小,则替换lowcost[],mst,储存这个点.4、然后再找一次最小的l原创 2016-11-19 15:45:31 · 207 阅读 · 0 评论 -
POJ2044 2502 2018简单几个递推
the reason of failure :1、输入两个数a,b 应该是从a到b 而我弄错是从1到b了.thinking:递推,通过前面的结果推出后面.如从3到7的方法数=从3到6+从3到5 =从3到5+从3到4+2 =2+1+2题意:Description有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂原创 2016-12-03 00:24:06 · 406 阅读 · 0 评论 -
hash的简单使用<找数字>
thinking:1、用一个数组存储出现过的数字,刚开下下标为1(可以思考为什么下标刚开始不能为0)。2、相同数对一个数取mod的值是固定的,通过这么mod出来的值作为关键字去查找是否存在。如先插入6 15 20 15,6 mod 7= 6,然后通过6查找之前是否有mod 后结果是 6 的数,没有,则把其下标也就是1 作为 head[6] 然后插入15 通过 15 mod 7 = 6原创 2016-12-12 09:52:21 · 328 阅读 · 0 评论 -
KMP
thinking:有s1,s2.2个数组,判断s2在s1中出现的次数,复杂度为O(N+M).如s1=1 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 5 s2=4 2 3 4 2 3用一个数组next[]储存s2的各个数字上一次在本数组出现的位子,就不用再重头开始判断,如next[1]=0,next[2]=0,next[3]=0,next[4]=1,next原创 2016-12-04 21:46:20 · 205 阅读 · 0 评论 -
HDU1232 并查集<并>
thinking:把每个结点初始化其就为根结点,然后一次性输入2个数到mix(a,b)函数,判断其是否属于同一个根结点,如果是同一个根结点什么都不发生,如果不是同一个结点,则把b结点加入到a所在的树,然后通过给每一个结点的根结点一个标记1,最后计算被标记的结点总数,那么这个总数就是树的总量。畅通工程Time Limit: 4000/2000 MS (Java/Others) Me原创 2016-12-06 18:14:13 · 223 阅读 · 0 评论 -
背包问题-<DP>-my first DP answer
题意:给出第一行M、N,表示M为背包最大重量,N为石头个数,2-N+1行分别为石头重量与石头价值,求出最大背包能装的石头价值.thinking:2个for循环----关键for(int i=1;ifor(int j=1;jif(j>=w[i])a[i][j]=max(a[i-1][j-w[i]]+c[i],a[i-1][j]);else a[i][j]=a[i-1][j];原创 2016-11-24 10:25:08 · 326 阅读 · 0 评论 -
预算 NOIP 取舍问题<枚举>
the reason of failure:还是i,J没弄清楚.必须把代码中每个字母的含义看清楚.thinking:通过把所有买的可能性枚举,如果是附件拿出,则直接拿出.如果是主件,则写一个循环,把其的附件也全部拿出.预算【问题描述】预算(budget.cpp/c/pas) NOIP 2006张琪曼等人要为太空战指挥中心购置设备,魔法学院的院长昨天说:“指挥中心需要购买哪些原创 2016-11-24 19:36:29 · 418 阅读 · 0 评论 -
milk<uscao>1.3 -<最简单的贪心>
一遍过.简单贪心.题目:Section1.3★Mixing Milk 混合牛奶牛奶包装是一个如此低利润的生意,所以尽可能低的控制初级产品(牛奶)的价格变的十分重要.请帮助快乐的牛奶制造者(Merry Milk Makers)以可能的最廉价的方式取得他们所需的牛奶.快乐的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同.而且,如一只母牛一天只能生原创 2016-11-25 15:43:44 · 352 阅读 · 0 评论 -
判断<有向/无向>图是否存在环
如果边数>=结点数,则该图必定存在环。无向图:对于无向图,可以通过并查集判断是否有环,通过查看2个结点是否均为一个根节点,如果均为一个根节点,则说明有环。有向图:对与有向图,可以通过拓扑排序的方法,查看是否能拓扑排序。因为如果有环,则这个环必定找不到入度为0的点。样例:7 61 21 72 33 44 64 5无向图模版:判断是否有环...原创 2016-12-16 20:00:34 · 1474 阅读 · 0 评论 -
求有向图的强连通分量<Tarjan>
概念:有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。过程:对于该图,刚1原创 2016-12-17 10:26:23 · 555 阅读 · 0 评论 -
dp小练
CCPC吉林D题,概率DP。暴力打表为2^n不可行,考虑每个点由什么状态转移过来。设DP[i][j]表示到坚持到玩了i回合,赢了j次仍然没有结束的概率。显然DP[i][j]=p1*DP[i-1][j]+p2*DP[i-1][j-1];//由上一场赢或者输转移过来。p1,p2表示分别的概率然后赢的概率就从dp[i][j]下次必赢进行累加就是结果了。#include <bits...原创 2018-09-28 23:03:48 · 262 阅读 · 0 评论