优先队列 + 并查集 + 字典树 + 欧拉回路 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线
2016-04-04 15:27
274 查看
这里给出基本思想和实现代码 .
优先队列 :
曾经做过的一道例题 坦克大战struct node { int x,y,step; friend bool operator <(node s1,node s2) // 定义结构体 的时候 这个 就是 用于 优先队列的 基准排序 { return s1.step>s2.step; // 步数小的 在上 为小顶堆 } }; 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; }
字典树
曾经做过的一道题 /article/11863545.html
构造一个结构体 , 该结构体 应该有 所有指向下一排所有元素的指针域 , 还应该有 该节点 必要的信息
struct node { int number; // 该节点作为 尾节点的次数 node next[26]; // 和 剩下的 指针域 }; int Insert(char *a,node *t) { node *p,*q; int id,i,j,l; p=t; // 已经开了空间 l=strlen(a); for(i=0;i<l;i++) { id=a[i]-'a'; if(p->next[id]==NULL) //如果 没有 这个线段的话 { q=(node *)malloc(sizeof(node)); q->sum=0; for(j=0;j<26;j++) q->next[j]=NULL; p->next[id]=q; // 建立线段 . 线段 的 另一端 已经设置好了. } p=p->next[id]; } (p->sum)++; return p->sum; }
欧拉回路 :
无向图存在欧拉通路 , 当且仅当改图为连通图 , 而且仅有 0 或 2 个奇数度节点 ( 不可能是 1 ) , 当有0个奇数度节点的时候为回路 , 有两个的是个为通路 .
有向图存在欧拉回路 , 当且仅当该图联通 , 且每个节点的入度 等于出度 .
有向图存在欧拉通路 , 当且仅当该图连同 除了两个节点以外的的每个节点的入度等于出度 , 在这两个节点中一个入度比出度大一 , 一个出度比入度大一(起点) .
可以用 并查集检查是否为 图是否连同
KMP算法( 俗称看毛片算法 ) :
相关文章推荐
- IT 团队管理
- java对象内存理解
- 【HDU 1396】 【ZOJ 1629】 Counting Triangles
- Ubuntu连接互联网
- 什么是指针?
- 机器学习&深度学习资料
- 前端开发跨浏览器计算页面大小、滚动高度
- 修改数据库字符集为'us7ascii'
- Linux C高级编程——网络编程之以太网(2)
- csv文件中有行字符串中有,的读取方法
- J2EE轻量级框架--4.03学习心得
- Deep learning Reading List
- 用户输入到缓存区清空的问题
- Linux进程间通信方式--本地socket
- C++ 中临时对象 和 const 对象 的一个区别
- C++中4种强制类型转化。static_cast,const_cast,reinterpret_cast,dynamic_cast
- poj3667 Hotel 线段树延迟更新 区间合并
- 狂人传记:戎马半生 何以安家
- 【转】用树莓派搭建web服务器
- hdu1421 搬寝室(普通DP)