优先队列 + 并查集 + 字典树 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线

这里给出基本思想和实现代码 .

优先队列 :

曾经做过的一道例题       坦克大战

1 struct node
2 {
3     int x,y,step;
4     friend bool operator <(node s1,node s2)      //   定义结构体   的时候   这个 就是  用于 优先队列的   基准排序
5     {
6         return s1.step>s2.step;             //    步数小的  在上   为小顶堆
7     }
8 };
9 priority_queue<node>Q;    //   优先队列的结构体定义说明和 生命方法     

并查集 :

曾经做过的一道例题      七桥问题

int findx(int x)
{
    if(x!=parent[x])
        parent[x]=findx(parent[x]);  //   回溯的时候压缩路径  这个是 压缩路径的精髓
    return parent[x];  //   实际上我也看不出来  到底哪里好 ......
}
son :       1 3 8 9
parent :    1 1 3 8
int find(int x)
{
    int k,j,r;
    r = x;
    while(r != parent[r])       //
        r = parent[r];
    k = x;
    while(k != r)
    {
        j = parent[k];
        parent[k] = r;
        k = j;
    }
    return r;
}

字典树

曾经做过的一道题   http://www.cnblogs.com/A-FM/p/5181956.html

构造一个结构体 , 该结构体 应该有   所有指向下一排所有元素的指针域 ,  还应该有  该节点 必要的信息

 1 struct node
 2 {
 3     int number;         //  该节点作为 尾节点的次数
 4     node next[26];   //   和  剩下的  指针域
 5 };
 6 int Insert(char *a,node *t)
 7 {
 8     node *p,*q;
 9     int id,i,j,l;
10     p=t;   //  已经开了空间
11     l=strlen(a);
12     for(i=0;i<l;i++)
13     {
14         id=a[i]-‘a‘;
15         if(p->next[id]==NULL)   //如果 没有  这个线段的话
16         {
17             q=(node *)malloc(sizeof(node));
18             q->sum=0;
19             for(j=0;j<26;j++)
20                 q->next[j]=NULL;
21             p->next[id]=q;        //  建立线段  . 线段 的 另一端 已经设置好了.
22         }
23         p=p->next[id];
24     }
25     (p->sum)++;
26     return p->sum;
27 }

树状数组 :

时间: 2024-10-12 10:17:01

优先队列 + 并查集 + 字典树 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线的相关文章

poj 2513 Colored Sticks(欧拉通路+并查集+字典树)

题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色,现在给定每个木棍两端的颜色,不同木棍之间拼接需要颜色相同的 端才可以,问最后能否将N个木棍拼接在一起. 解题思路:欧拉通路+并查集+字典树.欧拉通路,每个节点的统计度,度为奇数的点不能超过2个.并查集,判断节点 是否完全联通.字典树,映射颜色. #include <cstdio> #include <cstring> #include <string> #includ

poj 2513 Colored Sticks 并查集 字典树 欧拉回路判断

点击打开链接题目链接 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 30273   Accepted: 8002 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sti

POJ - Colored Sticks - 并查集+字典树

这道题主要还是要判断是不是欧拉图 说白了就是能不能这幅图能不能用一笔画下来,那么就可以知道了,如果是一个环状的,说明奇数度就不存在,否则就只能用两个奇数度(起点终点)//我的理解这是 只需要用字典树将单词变为对应的一个数字,然后并查集操作就可以,需要维护一个度变量 #include<stdio.h> #include<string.h> int du[500010],p[500010]; int tot=1; struct tree { tree *next[30]; int id

测试赛A - Colored Sticks(并查集+字典树+欧拉回路)

A - Colored Sticks Time Limit:5000MS     Memory Limit:128000KB     64bit IO Format:%I64d & %I64u Submit Status Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sti

hdu 3172 Virtual Friends (并查集 + 字典树)

题目: 链接:点击打开链接 题意: 输入n,给出n行数据,每行有两个字符串,输出关系网络中朋友的个数,n行. 思路: 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int N = 22; const int M = 200020; struct node { int c; node *chil

HDU 4417 Super Mario ( 超级马里奥 + 主席树 + 线段树/树状数组离线处理 + 划分树 )

HDU 4417 - Super Mario ( 主席树 + 线段树/树状数组离线处理 + 划分树 ) 这道题有很多种做法,我先学习的是主席树.后面陆续补上线段树离线和划分树 题目大意就是给定一个区间给定一个数列,每次要求你查询区间[L,R]内不超过K的数的数量 主席树做法: 最基本的是静态第k大,这里是求静态的 <= K,差不多,在Query操作里面需要修改修改 先建立size棵主席树,然后询问的时候统计的是 第R棵主席树中[1,K]的数量 - 第L-1棵主席树中[1,K]的数量 注意这里下标

树状数组求区间最大值(树状数组)(复习)

如题. 当遇到单点更新时,树状数组往往比线段树更实用. 算法: 设原数序列为a[i],最大值为h[i](树状数组). 1.单点更新: 直接更新a[i],然后再更新h[i].若h[i]的值有可能改变的,则表示区间一定包含i结点.那么就两层lowbit更新所有可能的h. 单点更新时间复杂度O(logn*logn) 1 void update(int x) 2 { 3 while(x<=n) 4 { 5 h[x]=a[x]; 6 for(int i=1;i<lowbit(x);i<<=1

poj 1195 二维树状数组 及二维树状数组模板

http://poj.org/problem?id=1195 求矩阵和的时候,下标弄错WA了一次... 求矩形(x1,y1) (x2,y2)的sum |sum=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1) 二维树状数组讲解:http://blog.csdn.net/u011026968/article/details/38532117 二维树状数组模板: /*========================================

C - Justice(优先队列+并查集)

Put simply, the Justice card represents justice, fairness, truth and the law. You are being called to account for your actions and will be judged accordingly. If you have acted in a way that is in alignment with your Higher Self and for the greater g