码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-04 16:24:02      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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

优先队列 : 

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

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 }

树状数组 : 

 

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

标签:

原文地址:http://www.cnblogs.com/A-FM/p/5352116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!