模板
RCY_ZHU
这个作者很懒,什么都没留下…
展开
-
高斯消元模板
高斯消元求异或方程组int equ,val;//equ:方程数,val:变元int a[Max][Max];//增广矩阵int x[Max];//解集int free_x[Max];//自由变元int free_num;//自由变元的个数int Gauss()//返回-1表示无解;0表示有唯一解,生成解集x[];否则返回自由变元个数{ int max_r,col,k;//max_r转载 2016-11-21 20:18:20 · 307 阅读 · 0 评论 -
开根号向下取整代码实现
ll sqrt(ll x){ ll l = -1,r = 1e10,mid; while(r-l > 1) { mid = (l+r)>>1; if(mid*mid > x) r = mid; else if(mid*mid < x) l = mid; else原创 2017-08-04 13:29:09 · 2526 阅读 · 1 评论 -
无向图寻找是否存在长度为k的环
dfs遍历以每一个点为起点是否存在长度为k的环。dfs(now,last,step)中的now表示当前点,last表示上一个访问的点,step一个记录路径长度的计数器,s【i】记录从起点到i点的路径长度。如果某点被访问第二次,则说明出现环,判断当前路径长度和它第一次出现是的长度差是否等于K即可。int k;bool e[N][N];//(1,1)开始,双向建边int s[N];bool dfs原创 2017-08-19 15:20:01 · 1354 阅读 · 0 评论 -
树状数组模板
从图中可以看到,树状数组中用的C[ ],每个点都有一定的管辖范围; 如C[1]=a[1]; C[2]=a[1]+a[2]; C[3]=a[3]; C[4]=a[1]+a[2]+a[3]+a[4];等等;基础模板:int lowbit(int x){ return x&(-x);}这个函数主要是用来求的是某个点管辖范围; 如果是x+=x&(-x);就是得到的改点的父节点的值;比如原创 2017-07-13 18:24:03 · 339 阅读 · 0 评论 -
大组合数取模模板
LL n,m,p = 1e9+7;LL quick_mod(LL a, LL b){ LL ans = 1; a %= p; while(b) { if(b & 1) { ans = ans * a % p; b--; } b >>= 1;原创 2017-08-13 16:47:03 · 897 阅读 · 0 评论 -
区间重叠的合并模板
struct Day { ll l,r; } day[N]; for(int i=1; i<n; i++) { if(day[i].l<=day[cnt].r+1) day[cnt].r=max(day[cnt].r,day[i].r); else { da原创 2017-08-13 16:44:08 · 622 阅读 · 0 评论 -
51Nod1463 找朋友(离线处理+树状数组维护区间最大值)
给定: 两个长度为n的数列A 、B 一个有m个元素的集合K 询问Q次 每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj数据约定: n,Q<=100000 m <= 10 0<=A[i]<=1000000000 1<=B[i]<=n 1<=K[i]<=n 保证B[i]互不相等 Input n Q m A1 A2 ….An B1 B2 ….Bn K1原创 2017-08-14 15:36:27 · 352 阅读 · 0 评论 -
dfs序
dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间。struct node{ int to; ll val;};vector<node> G[N];int L[N],R[N];int n,m,ti;void addedge(int u,int v,ll w){ G[u].push_back((node){v,w}); G[v].push_back(原创 2017-08-14 20:53:24 · 437 阅读 · 0 评论 -
线段树
线段树主要用于多次查询和更改操作,时间复杂度是o(nlog(n)),n为区间长度ll原创 2016-11-09 20:48:30 · 97 阅读 · 0 评论 -
并查集判断连通块个数
#include<iostream> using namespace std; int pre[1050]; //保存节点的直接父节点//查找x的根节点 int find(int a){ if(pre[a]!=a) pre[a]=find(pre[a]);//路径压缩,本结点更新为根结点的子结点 return pre[a]; } /原创 2017-08-27 18:23:49 · 2408 阅读 · 0 评论 -
优先队列优化的求最短路和次短路条数以及长度的模板
//无向图版本struct Edge{ int to; int w;};struct node{ int v; int dist; int mark; bool friend operator <(const node &a,const node &b) { if(a.dist!=b.dist)原创 2017-08-30 20:00:44 · 370 阅读 · 0 评论 -
基尔霍夫矩阵计算欧拉回路
Matrix-Tree定理(Kirchhoff矩阵-树定理) *算法思想: *(1)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0;当i=j时,dij等于vi的度数; *(2)G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则aij=1,否则为0; *定义图G的Kirchhoff矩阵C[G]为C[G]=D[G]-A[G];原创 2017-08-02 19:51:09 · 701 阅读 · 0 评论 -
二分图最大匹配算法
/*该模板不用建立超级源点和超级汇点,直接把二分图中对应的边连接即可*/int V;//顶点数vector<int> G[N];//图的邻接表表示int match[N];//所匹配的点顶点bool used[N];//dfs中用到的访问标志//向图中增加一条连接u和v的边void addedge(int u,int v){ G[u].push_back(v);原创 2017-07-20 16:49:11 · 545 阅读 · 0 评论 -
最小生成树算法
常用的最小生成树算法主要有两种,Prim算法和Kruskal算法。Prim算法的原理是从一个顶点出发,贪心地选取当前点集中权值最小的边,知道所有的点都加入该点集中,算法结束 Prim算法:int cost[N][N];//无向图,双向连边,cost[u][v]表示e=(u,v)的权值,不存在时为INF;点从(1,1)开始int mincost[N];//从集合x出发的变道每个顶点的最小权值bo原创 2017-07-19 12:32:10 · 789 阅读 · 0 评论 -
判断四点共面
四个点构造三个向量,形成一个行列式 若行列式的值为0,则共面;不为0,则不共面 #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>using namespace std;struct Point{ int x,y,z;} p[5];int main()原创 2017-07-10 16:53:12 · 4881 阅读 · 0 评论 -
判断一个数是否包含平方因子
int miu(int num){ int cnt1=0,cnt2=0; for(int i=2;i*i<=num;i++) { cnt2=0; if(num%i==0) { cnt1++;//质因子个数 while(num%i==0)//判断该因子出现的次数原创 2017-07-10 17:43:16 · 1906 阅读 · 0 评论 -
区间第k大的数(主席树)
套主席树求区间第k小的数的模板,然后求区间[l,r]第k大的数就等于求区间[l,r]第r-l+1-k小的数(下标从1开始)区间第K小值问题 有n个数,多次询问一个区间[L,R]中第k小的值是多少。查询[1,n]中的第K小值 我们先对数据进行离散化,然后按值域建立线段树,线段树中维护某个值域中的元素个数。 在线段树的每个结点上用cnt记录这一个值域中的元素个数。 那么要寻找第K小值,从根结点开原创 2017-07-10 21:10:05 · 727 阅读 · 0 评论 -
母函数
母函数是一个很神奇的东西。 详细请看某位大牛的文章,模板挺好的 http://blog.csdn.net/xiaofei_it/article/details/17042651模板: K对应具体问题中物品的种类数。 P对应具体问题的最大指数(通常是问题的最大解) v[i]表示该乘积表达式第i个因子的权重,对应于具体问题的每个物品的价值或者权重。(有时v[i]可以省略) n1[i]表示该乘原创 2017-07-12 20:54:24 · 351 阅读 · 0 评论 -
KMP算法-next数组的含义和求法
KMP 为字符串的匹配算法,主要定义了一个next数组来实现匹配的跳转 本文章主要讲讲next数组的含义以及求法原创 2016-11-09 20:22:47 · 984 阅读 · 0 评论 -
Floyd-Warshall算法求矩阵的传递闭包
有向图的传递闭包表示从邻接矩阵A出发,求的所有节点间的路径可达情况int vis[N][N];//邻接矩阵,vis[i][j]=1表示i到j可达;void warshall(int x,int y) //warshall算法实现过程;{ for(int i = 0; i <= N; i++) vis[x][i] += vis[y][i];}void slove()原创 2017-07-20 16:01:58 · 2001 阅读 · 0 评论 -
最大流算法(Ford-Fulkerson)
struct edge{ int to,cap,rev;//终点,容量,反向边};vector<edge>G[N];//图的邻接矩阵表示bool used[N];//dfs中用到的访问标记//向图中增加一条从s到t容量为cap的边void addedge(int u,int v,int w){ G[u].push_back((edge){v,w,G[v].size()}原创 2017-07-21 14:32:43 · 806 阅读 · 0 评论 -
XTU OJ Highway(树的直径)
树的直径是指树的最长简单路。 求法: 两遍DFS :先任选一个起点DFS找到最长路的终点,再从终点进行DFS,则第二次DFS找到的最长路即为树的直径; 原理: 设起点为u,第一次DFS找到的终点v一定是树的直径的一个端点 证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于DFS找到了v矛盾) 2) 如果u不是原创 2017-07-18 15:14:39 · 371 阅读 · 0 评论 -
结构体优先队列自定义优先度
bool operator ()(int &a,int &b){ return a>b;//最小值优先 } bool operator ()(int &a,int &b){ return a<b;//最大值优先 } int x; bool operator < (const number1 &a) const {原创 2017-07-18 17:32:49 · 631 阅读 · 0 评论 -
全图最小割(Stoer-Wagner算法)
全图最小割大致是来解决这样一类问题: 给定一个n个点m条边的无向图,每条边有一个最大流量,给定一个源点s,求以哪个点作为汇点可以使整个图的最大流最小。思路分两步(引用网上的普遍解析): 一:找到S - T的最小割Mincut,其中S 和 T为最后并入集合的两个点。 1,初始化数组vis 和 wage; 2,遍历所有不在集合且没有被合并的点,找到最大wage值的点Next,并记录Mincut、原创 2017-07-18 20:15:56 · 1039 阅读 · 0 评论 -
SQL语句 生成随机整数
update 表名 set 列名 = (select cast(ceiling(rand(checksum(newid()))*随机数的范围)as int ))例如:update tb_News set Clickvolume = (select cast(ceiling(rand(checksum(newid()))*100)as int ))在tb_News中的Clickvolume生成1原创 2017-12-28 13:27:14 · 4263 阅读 · 0 评论