常用算法
背着代码的蜗牛
这个作者很懒,什么都没留下…
展开
-
最小生成树
最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 简单来说:最小生成树就是在一个连通图(每个点都相连的无向图)中使得权值和最小的树,保证每个点都在里面。 最小生成树其实是最小权重生成树的简称。 最小生成树又叫“MST”。 应用: 例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间原创 2016-07-09 17:14:32 · 441 阅读 · 0 评论 -
欧拉函数模板
在数论,对正整数n,欧拉函数是小于等于n的数中与n互质的数的数目。 #include<iostream>#include<cstdio>#define lon long longusing namespace std;int n,ans;int main(){ scanf("%lld",&n);ans=n; for(int i=2;i*i<=n;i++) if(原创 2016-11-07 15:15:24 · 336 阅读 · 0 评论 -
欧几里得算法与扩展欧几里得算法模板
#include<iostream>#include<cstdio>using namespace std;int a,b,x,y;int gcd(int a,int b){ if(a%b==0) return b; return gcd(b,a%b);}int ex_gcd(int a,int b,int &x,int &y){ if(b==0)原创 2016-11-07 22:06:46 · 345 阅读 · 0 评论 -
最长上升子序列(nlogn算法)
#include<iostream> using namespace std;const int maxn=1000000;int n,j,a[maxn],c[maxn],len;int find(int l,int r,int x){ if(l==r) return l; int mid=(l+r)>>1; if(c[mid]<x) return find(mid原创 2016-08-16 20:04:31 · 279 阅读 · 0 评论 -
树状数组的一系列操作
树状数组的一系列操作1、树状数组求逆序对#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn=100010;int n,a[maxn],b[maxn],c[maxn],s[maxn];int lowbit(int x){ return x&(-x);}v原创 2016-11-11 21:14:28 · 323 阅读 · 0 评论 -
spfa判断负环
spfa判断负环spfa+bfs#include<iostream>#include<cstdio>#include<queue> #include<cstring>using namespace std;const int maxn=200010;const int inf=0x7fffffff;int t,n,m,tot,d[maxn],dis[maxn],head[maxn];原创 2016-11-11 20:15:39 · 748 阅读 · 0 评论 -
加权二分图之km算法
加权二分图之km算法百科: KM算法求的是完备匹配下的最大权匹配: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接XiYj有权wij,求一种匹配使得所有wij的和最大。步骤: 一般对KM算法的描述,基本上可以概括成以下几个步骤: (1)初始化可行标杆 (2)用匈牙利算法寻找完备匹配 (3)若未找到完备匹配则修改可行标杆 (4)重复(2)(3)直到找到相等子图的完备匹配原创 2016-11-08 22:10:56 · 4086 阅读 · 3 评论 -
树状数组求逆序对模板
#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;struct node{ int num; int id; bool operator < (node x) const { if(num==x.num) return原创 2016-09-07 21:48:08 · 581 阅读 · 0 评论 -
重载运算符
重载运算符为什么要重载运算符: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如结构体),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 什么是重载运算符: 简单来说:运算符重载,就是对已有的原创 2016-09-24 08:31:03 · 380 阅读 · 0 评论 -
差分约束系统详解
一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y<=b不等式的约束,问你是否满足有解的问题。好神奇的是这类问题竟然可以转换成图论里的最短路径问题,下面开始详细介绍下 比如给出三个不等式,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值,我们可以把a,b,c转换成三个点,k1,k2,k3是边上的权,如图 由题我们可以得知,这个有向图转载 2016-09-18 10:15:00 · 331 阅读 · 0 评论 -
读入优化模板
int init() { int f=1,p=0;char c=getchar(); while(c>’9’||c<’0’){if(c==’-‘)f=-1;c=getchar();} while(c>=’0’&&c<=’9’){p=p*10+c-‘0’;c=getchar();} return f*p; }原创 2016-09-10 16:45:14 · 1345 阅读 · 0 评论 -
邻接链表建标模板
n表示点的个数,m表示边的条数。#include<iostream>using namespace std;struct node{ int v; int next;}a[1001];int n,m,tot,head[1001];void edd_edge(int u,int v){ a[tot].v=v; a[tot].next=head[u];原创 2016-07-08 21:58:17 · 284 阅读 · 0 评论