算法模板(自用)
模板
Eloik
人工智能、大数据
展开
-
矩阵快速幂
//快读inline ll read(){ ll X=0; bool flag=1; char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();} while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();} if(flag) return X;原创 2020-11-03 15:47:10 · 1694 阅读 · 0 评论 -
Kruskal最小生成树
#include <bits/stdc++.h>using namespace std;#define maxn 1000int n,m;struct edge{ int u,v,w;}e[maxn];bool cmp(edge a,edge b){ return a.w<b.w;}int ans;//并查集int s[maxn];int find_set(int x){return x==s[x]?x:s[x]=find_set(s[x])原创 2020-10-26 23:24:36 · 1691 阅读 · 0 评论 -
Floyd求无向图最小环
//快读inline int read(){ int X=0; bool flag=1; char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();} while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();} if(flag) return X; .原创 2020-10-26 23:24:52 · 1739 阅读 · 0 评论 -
并查集
const int maxn = 10004;const int maxm = 200005;int s[maxn],height[maxn];//树的高度//初始化void init_set(){ for(int i=1;i<=maxn;i++){ s[i] = i; height[i] = 0; }}//查询/*int find_set(int x){ return x==s[x]?x:find_set(s[x]);}*原创 2020-10-26 23:24:58 · 1661 阅读 · 0 评论 -
邻接表
const int MAX[200001]; struct node{ int from,to,w; node(int f,int t,int d){ from = f; to = t; w = d;}};vector<node> edge[MAX];//初始化for(int i=0;i<MAX;i++) edge[i].clear();//存边edge[u].push_back(node(u,v,w));//遍历结点u连接的所有边for(int i=0;i&原创 2020-10-12 21:53:04 · 1657 阅读 · 0 评论 -
链式前向星
const int SIZE = 1000001;int head[SIZE],cnt;//head数组记录头结点,head[u]为u连接的第一个点在edge中存放的下标;cnt为edge计数,无实际意义struct EDGE{ int to,next,w;//to为与该点连通的点,next为下一个点}edge[SIZE];//初始化前向星,多组数据输入才使用,单组数据不用!/*void init(){ for(int i=0;i<MAX;++i){ edge[i].to =原创 2020-10-12 21:52:33 · 1667 阅读 · 0 评论 -
Dijkstra+优先队列+链式前向星
const ll inf_ll = 9223372036854775807;const int MAX = 200005;struct EDGE{ int to,next,w;}edge[MAX];int head[MAX],cnt;//初始化前向星,多组数据输入才使用,单组数据不用!/*void init(){ for(int i=0;i<MAX;++i){ edge[i].to = 0; edge[i].w = 0; edge[i].next = 0; head原创 2020-10-12 21:51:48 · 1725 阅读 · 0 评论 -
Floyd
//超过200,Floyd大概率超时 const int MAX = 200;int graph[MAX][MAX];//邻接矩阵存图 int n,m;//n为结点数,m为边数 const int inf_int = 2147483647;void Floyd(){ //Floyd思想是利用动态规划的思想,经过k结点与不经过k结点 for(int k=1;k<=n;k++)//k为中间节点 for(int i=1;i<=n;i++) if(graph[i][k] != i原创 2020-10-12 21:50:31 · 1681 阅读 · 0 评论