一、并查集(实质是有多棵树的森林)
优化: 路径压缩: 加快查找速度.
按秩合并: 使具有较少结点的树的根指向具有较多结点的树的根。
并查集删除点: 一开始就用虚拟根表示父节点。
要想直接通过修改father[x]来删除点,就必须一开始就用虚拟根表示父节点
HDU - 2473 https://blog.csdn.net/S_999999/article/details/82014819
带权并查集 (种类并查集 ):
HDU 3038 https://blog.csdn.net/S_999999/article/details/95166617
POJ 1182 https://blog.csdn.net/S_999999/article/details/81148593
POJ 2492 https://blog.csdn.net/S_999999/article/details/95077786
POJ 1703 https://blog.csdn.net/S_999999/article/details/95169725
模板:HDU 1232
#include <iostream>
using namespace std;
int parent[1009],deep[1009];
void init(int n) {
for(int i=1;i<=n;i++){
parent[i]=i;
deep[i] =0;
}
}
int find(int x ){
return parent[x]==x?x:parent[x] = find(parent[x]);
}
void merge(int x,int y){
int fx=find(x);
int fy=find(y);
if( fx==fy )
return ;
if( deep[fx] > deep[fy] ){
parent[fy] = fx;
}
else {
parent[fx] = fy;
if( deep[fx] == deep[fy])
deep[fy]++;
}
}
int main( void ){
int n,m;
while(cin>>n&&n){
cin>>m;
init(n);//初始化
int x,y;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
merge(x,y);
}
int count=0;
for(int i=1;i<=n;i++){
if(parent[i]==i)//当村庄的根节点编号等于该村庄编号时,代表一个集合
count++;
}
cout<<count-1<<endl;
}
return 0;
}
二、 栈、队列
栈模拟过程: https://blog.csdn.net/S_999999/article/details/81430205
队列模拟 : https://blog.csdn.net/S_999999/article/details/81319658
三、 图论
1. 最小生成树 (经过图的所有顶点)
Kruskal算法:
https://blog.csdn.net/S_999999/article/details/81138839
https://blog.csdn.net/S_999999/article/details/84074098
Prime算法:
2. 最短路
(最短路问题,通俗的说就是就是给你n个点,m条边,然后找出某两个点之间的最短距离)
Floyd : https://blog.csdn.net/S_999999/article/details/82711125
dijkstral : https://blog.csdn.net/S_999999/article/details/82707976
dijkstral 之多源最短路:https://blog.csdn.net/S_999999/article/details/84202712
SPFA(Bellman-Ford队列优化): https://blog.csdn.net/S_999999/article/details/82779018
3. 拓扑排序 ( 难点在于图的存储 )
https://blog.csdn.net/S_999999/article/details/82695063
https://blog.csdn.net/S_999999/article/details/82688704
4. 二分图最大匹配 HDU 1281 棋盘游戏
5. 搜索 DFS 、BFS、启发式搜索 、
记忆化搜索 HDU 1331 Function Run Fun 、POJ 1088 滑雪 、 P1048采药
6.网络流、费用流
四、 动态规划
1. 0 1背包 https://blog.csdn.net/S_999999/article/details/81779149
https://blog.csdn.net/S_999999/article/details/89605183
2. 完全背包 https://blog.csdn.net/S_999999/article/details/89606894
3. 多重背包
4. 分组背包 https://blog.csdn.net/S_999999/article/details/89646518
5. 混合背包 https://blog.csdn.net/S_999999/article/details/89608383
6. 树状DP、区间DP https://blog.csdn.net/S_999999/article/details/89977119
7. 搜索 与DP关系
8. 最长上升子序列(LIS) https://blog.csdn.net/S_999999/article/details/81738721
https://blog.csdn.net/S_999999/article/details/81806108
https://blog.csdn.net/S_999999/article/details/81805271
状态压缩模型、概率DP
9. 最长公共子序列: LCS https://blog.csdn.net/S_999999/article/details/81809033
五、 数论
1. gcd
2. 欧几里得、扩展欧几里得
https://blog.csdn.net/S_999999/article/details/89332446
https://blog.csdn.net/S_999999/article/details/89332075
3. 快速幂 、矩阵乘法 、素数筛https://blog.csdn.net/S_999999/article/details/81950792
4. 欧拉定理 、费马小定理
5. 唯一分解定理: https://blog.csdn.net/S_999999/article/details/89441721
算数基本定理 : https://blog.csdn.net/S_999999/article/details/89437436
6. 博弈论 https://blog.csdn.net/S_999999/article/details/89434158
莫比乌斯反演
7. 组合数学
六、 字符串
1.KMP
2. Manacher
3. 回文串
4. 后缀数组
5.AC自动机
七、计算几何
字典树模板题 https://blog.csdn.net/S_999999/article/details/83352358