ACM-树
文章平均质量分 74
但求-_-心安
充满鲜花的世界到底在那里,如果他真的存在那么我一定会去。
展开
-
树一周小结 树的学习
树的一周中,学习了字典树,线段树,ac自动机1.字典树是这三种树中最简单的一种树,比如这个树就是字典树的建立,b,abc,等红色的点就是一个字符串的结束,字典树的建立,就像这个树的名字一样,为了查询一个字符串在不在这个树中,可以快苏的查询到。每一个字母都有26个后缀节点,代表26个字母,建树的时候如果存在这个字母就继续往下不存在就建立上,还要有一个数表示是不是字符串的结束,如下代码原创 2016-10-24 12:25:46 · 433 阅读 · 0 评论 -
hdu 6121 Build a tree
对于树的每一层,我们可以分为三种节点,①满节点的k叉树②不满的k叉树③比第一种情况少一层的满节点的k叉树,然后从叶子节点开始不断转移到上一层。对于k=1进行特判,打表找规律。。。。真TM刺激。。。爽的不行不行的,感觉看了题解是很容易,但是自己去想,一步步不出错,还是要有一定的脑洞的#includeusing namespace std;typedef long long ll;int原创 2017-08-16 11:51:56 · 611 阅读 · 0 评论 -
poj 1679 The Unique MST (次小生成树)
就是求是不是有两个以上最小生成树,先生成一次最小生成树,把每条最小生成边去掉一次,然后看是否还会生成等大小的最小生成树,kruskal存储的是边所以可以优化很多代码,用prime算法也是可以的//#include#include #include #include using namespace std;typedef long long ll;const int VM=120;原创 2017-08-16 14:09:54 · 211 阅读 · 0 评论 -
poj 1789 Truck History 最小生成树
#include #include using namespace std;#define MAXV 2001#define INF 999999999 /* prim算法:从第一个点出发,寻找最近的距离 每一次都寻找离这个堆最近距离的点,寻找到 最后一个点。 */int n;char s[MAXV][8];int map[MAXV][MAXV];int d[原创 2017-01-19 15:24:04 · 251 阅读 · 0 评论 -
hdu 6070 Dirt Ratio
我们先二分答案得到k,那么我们需要在序列中找一段区间使得它的sum/len转换一下得到sum-len*k,最近有些失了志,不愿去自己动手敲代码。。。。#include using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)) #define bug puts("bug"); inline int原创 2017-08-12 09:11:54 · 238 阅读 · 0 评论 -
POJ - 3264 Balanced Lineup(RMQ)
#include#include#include#include#include#include#include#includeusing namespace std;int dp[50009][30]={0},dp1[50009][30]={1000009};int a[50009],n;void init(){ for(int j=0;(1<<j)<=n;j+原创 2017-04-11 12:56:43 · 247 阅读 · 0 评论 -
Vitya and Strange (tire树)
题意:输入一个数列,输入x,让x和数列每一个数进行异或运算,这个真的难翻译,求mex()字典树的一种运用,把数列中没有的数,入字典树,如果有和x相同的肯定返回0 了#includeusing namespace std;typedef long long ll;#define pb push_backbool vis[600005]={0};struct node{ no原创 2017-08-30 19:43:53 · 316 阅读 · 0 评论 -
Codeforces Round #434 Polycarp's phone book (字典树)
字典树,怎么是字典树呢,把所有的电话都存进去,电话的子串也存进去,每个节点标记上他是第几个数的,有个cnt计数。最后每个数输出最短的那个数。代码不长很好理解。#include using namespace std;#define pb() push_back() const int MAX=10;typedef struct TrieNode原创 2017-09-19 16:09:00 · 448 阅读 · 0 评论 -
2017 icpc亚洲区预赛西安站 H (线段树)
一个裸的线段树模板:#include using namespace std;struct node{ int min1,l,r,lazy;}a[400000+5];void build(int l,int r,int root){a[root].l=l;a[root].r=r;if(l==r){ scanf("%d",&a[root].min1);原创 2017-10-31 16:34:00 · 669 阅读 · 0 评论 -
HihoCoder - 1080 更为复杂的买卖房屋姿势 (线段树)
#include #include using namespace std; //线段树区间更新模板 //不写注释的模板都是傻,1年后保证自己看不懂const int N = 100005;struct node{ int l,r,sum; int add,setv;}tree[N<<2];int a[N];int ans;void build(int ro原创 2017-05-01 17:30:25 · 398 阅读 · 0 评论 -
poj 2482 Stars in Your Window (线段树+平面扫描)
思路如果硬来肯定超时,所以线段树。数据处理,把x的点的亮度为k,x+w的亮度为-k,就是如果超出他的范围,就减去k,这样用线段树求区间最大值就行了#include #include #include #include using namespace std;#define LL long long#define MAX_N 10000LL xs[MAX_N]; //原创 2017-04-12 19:35:31 · 232 阅读 · 0 评论 -
hihoCoder1014 Trie树
基本的tire树 加上模板#include#include#include#include#includeusing namespace std;#define MAX 26typedef struct tirenode{ int nCount; // 该节点前缀 出现的次数 struct tirenode *next[MAX];//该节点的后续节点}原创 2016-10-13 13:18:13 · 328 阅读 · 0 评论 -
hdu 2846 Repository
g++内存超限,c++对了字典树的变形。1-len-1到len-1全都入字典树,id代表不让一个字符串加两次#include#include#include#include#includeusing namespace std;#define MAX 26typedef struct tirenode{ int nCount; // 该节点前缀 出现的次数原创 2016-10-13 17:21:25 · 346 阅读 · 0 评论 -
RMQ问题再临 (线段树)
#include#include#include#include#includeusing namespace std;#define LL long long#define pii pair#define INF 0x3f3f3f3fusing namespace std;//先说个简单的东西 v<<1==v*2//v<<1|1==y*2+1const int maxn原创 2016-10-15 17:38:43 · 306 阅读 · 0 评论 -
HDU 2795 Billboard
#include#include#include#include#includeusing namespace std;#define LL long long#define pii pair#define INF 0x3f3f3f3fusing namespace std;//简单的线段树用于区间的改变值,或者变形贴报纸//怎么贴最好,能不能贴的下原创 2016-10-15 21:57:45 · 344 阅读 · 0 评论 -
poj 1258 Agri-Net 最小生成树模板
#include #include #include using namespace std;#define MAXV 501#define INF 999999999 /* prim算法:从第一个点出发,寻找最近的距离 每一次都寻找离这个堆最近距离的点,寻找到 最后一个点。 */int n;int map[MAXV][MAXV];int d[MAXV];b原创 2017-01-19 16:38:56 · 265 阅读 · 0 评论 -
poj 3253 Fence Repair (哈夫曼树)
#include #include #include #include #include #include #define MAXN 60 /*简单的哈夫曼树,就是每次都取最短的两个,n-1次,最后那个数就是结果用优先队列,朴素超时 */using namespace std;int n;__int64 a[40100];void solve(){ __int原创 2017-01-21 17:21:55 · 295 阅读 · 0 评论 -
poj 2777 Count Color (线段树)
#include#include#include#include#includeusing namespace std; #define MAXN 100010 /* update是把一个区间内颜色相同的改成相同颜色 颜色不同为-1 query 是查询函数,如果颜色不是-1,就把这个颜色记录为1 最后所有在这个区间的颜色都加一起 */ struct node {原创 2017-03-10 15:42:39 · 226 阅读 · 0 评论 -
Frequent values POJ - 3368 (RMQ)
#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3fusing namespace std;/*count1[i]记录出现a[i]的次数,left1记录相同数字的左节点,right记录相同数字的右节点,num记录第i个数是第k个相同的数*/int dp原创 2017-04-11 15:07:19 · 272 阅读 · 0 评论 -
2017 icpc亚洲区预赛西安站 K Lover || (线段树)
线段树求出b数组中最短的能和a数组完全匹配的开头和结尾,如果求l到r中是否可以匹配,直接lg(r)的算法就可以出来了。首先为什么要用线段树来求b数组中最短的能和a数组完全匹配的开头和结尾,因为这样才能求出结果,不然的话没办法进行判断怎么才满足,用线段树的话,区间修改,求1到n的最小值,如果最小值大于等于0就是匹配。看代码吧在代码中加注释更容易理解,根据知乎大佬的推荐,我看了https://loj....原创 2017-10-31 21:09:47 · 1271 阅读 · 7 评论