网站大量收购独家精品文档,联系QQ:2885784924

基本算法模板.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基本算法模板

1.图论 1.1 并查集 2 1.2 最小生成树 1.3 单源最短路径(dijstra,spfa ) 1.4 拓扑排序 1.5 割点个数 2.字符串 2.1kmp 和 ex_kmp 2.2manacher 算法 2.3 最小表示法 3.数据结构 3.1 树状数组 3.2 线段树 4.数学 4.1 矩阵快速幂 4.2lucas 定理和中国剩余定理 4.3 欧拉函数 4.4 扩展欧几里得 并查集 int par[MAX_N] //初始化n个元素 void init(int n) { for(int i=0;in;i++) par[i]=i; } //查询树的根 int find(int x) { if(par[x]!=x) return par[x]=find(par[x]); return x; } //合并x,y所属的集合 void unite(int x,int y) { x=find(x); y=find(y); if(x!=y) par[x]=y; } //判断x,y是否属于同一个集合 bool same(int x,int y) { return find(x)==find(y); } 单源最短路径问题(Diijkstra 算法) struct edge { int to,cost; }; typedef pairint,int P; int V; vectoredge G[MAX_N]; int d[MAX_V]; void dijkstra(int s) { proirity_queueP,vectorP,greaterP que; fill(d,d+V,INF); d[s]=0; que.push(P(0,s)); while(!que.empty()) { P p=que.top(); que.pop(); int v=p.second; if(d[v]p.first) continue; for(int i=0;iG[v].size();i++) { edge e=G[v][i]; if(d[e.to]d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } } spfa 算法 typedef struct edge { int to,cost; }edge; const int MAX_N=10000; const int INF=999999; vectoredge G[MAX_N];//邻接表存储图 bool in_queue[MAX_N];//判断点是否在队列中 int in_sum[MAX_N];//记录点入队列的次数 int dist[MAX_N];//从原点到其他点的最短路 int path[MAX_N];//记录前驱点 int nodesum;//点的个数 int edgesum;//边的个数 bool spfa(int source) { dequeintdq; for(int i=1;i=nodesum;i++)//初始化数组 { in_sum[i]=0; in_queue[i]=false;

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档