随笔分类 - 算法模板等总结
摘要:今天又切了一题,做题的同时当然也验证了各种模板每次都感觉有所改进View Code #include <math.h>#include <cstdio>#include<algorithm>using namespace std;const int maxn = 100010;const double eps = 1e-8;inline int max(int x,int y){return x>y?x:y;}inline double max(double x,double y) {return x>y?x:y;}inline double m
        阅读全文
            
摘要:View Code #define MIN(a,b) ((a)<(b)?(a):(b))#define INF 999999#define MAX 5110int n,match[MAX];bool sx[MAX],sy[MAX];int lx[MAX],ly[MAX],map[MAX][MAX];bool path(int u){ sx[u]=true; for(int v=0;v<n;v++) if(!sy[v]&&lx[u]+ly[v]==map[u][v]) { sy[v]=true; if(match...
        阅读全文
            
摘要:从网上找的模板,测试了一下View Code #include <iostream>#include <algorithm>#include <string>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <memory.h>#include <queue>#include <vector>#include <cmath>using namespace std;int sumFlow;const
        阅读全文
            
摘要:View Code const int maxn = 100000;const double eps = 1e-8;const double pi = acos(-1.0);#define sgn(x) (fabs(x)<eps?0:(x>0?1:-1))struct Point { double x, y; Point(double a=0,double b=0){x=a;y=b;} Point operator - (const Point& t) const { Point tmp; tmp.x = x - t.x; tmp...
        阅读全文
            
摘要:[网络流]最大权闭合图(转载)来自:http://hi.baidu.com/%C6%AE%BB%A8%C4%EA%B4%FA/blog/item/45d4bb1765e7044721a4e960.html以下内容参考 胡伯涛 《最小割模型在信息学竞赛中的应用》,感谢他为我们提供这么优秀的论文。看不懂以上论文的同学,可以试试看一下以下内容,本文无大量的数学符号,方便阅读理解。首先我们由一道题来引入,见[线性规划与网络流24题 2] 太空飞行计划问题。这道题中,实验依赖于仪器,而实验和仪器都有权值,且仪器为负,实验为正。这里闭合图的概念就很好引出了。在一个图中,我们选取一些点构成集合,记为V,且集
        阅读全文
            
摘要:View Code #include <cstdio> int left[250003], right[250003]; __int64 count; void merge(int a[], int l, int m, int r) { int i, j, k, n1, n2; n1 = m - l + 1; n2 = r - m; for (i = 0; i < n1; i++) left[i] = a[l+i]; for (i = 0; i < n2; i++) right[i] = ...
        阅读全文
            
摘要:方法:先对n分解质因数,分别记录每个质因数,那么所求区间内与某个质因数不互质的个数就是n / r(i),假设r(i)是r的某个质因子。假设只有三个质因子,总的不互质的个数应该为p1+p2+p3-p1*p2-p1*p3-p2*p3+p1*p2*p3,及容斥原理,可以转向百度百科查看相关内容pi代表n/r(i),即与某个质因子不互质的数的个数当有更多个质因子的时候,可以用状态压缩解决,二进制位上是1表示这个质因子被取进去了。如果有奇数个1,就相加,反之则相减View Code #include<vector>#include<cstdio>using namespace s
        阅读全文
            
摘要:核心思想:当某个字符失配时,尽可能多的向右滑动而又不影响结果。具体见http://www.matrix67.com/blog/archives/115/View Code #include<cstdio>#include<cstring>int n,m;char a[1000],b[1000];int p[1000];void getp(){ p[1]=0; int i,j=0; for(i=2;i<=m;i++){ while(j>0&&b[j+1]!=b[i]) j=p[j]; if(b[j+1]==b[i]) j+=1; p[i...
        阅读全文
            
摘要:毫无疑问,最远点对肯定都在土包上所以可以先求凸包再两两枚举土包上的点这时候的点会比原先情况下少很多凸包用的是快速土包法这种方法在有些时候会退化成N^2英文例子:http://www.cs.princeton.edu/courses/archive/spr10/cos226/demo/ah/QuickHull.html大牛博客:http://www.cnblogs.com/Booble/archive/2011/03/10/1980089.htmlView Code //快速土包算法,递归#include <iostream>#include <math.h>#defin
        阅读全文
            
摘要:View Code struct PP{ int len,num; bool operator<(const PP &b) const{ return len > b.len; }}dis[30010];priority_queue<PP> Q;int vis[30010];void dijkstra(){ while(!Q.empty()) Q.pop(); int i,j,k; PP tmp; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) { dis[i].num=...
        阅读全文
            
摘要:View Code class trie{public: int num; trie *child[26]; trie() { num=0; memset(child,0,sizeof(child)); }}root;int insert(char *s){ class trie *cur=&root; int len=strlen(s); for(int i=0;i<len;i++) { int id=s[i]-'a'; if(!cur->child[id]) ...
        阅读全文
            
摘要:View Code int prime()//下标从1开始 { int i,v,k; int ret=0,mi; for(i=1;i<=n;i++){ flag[i]=0; D[i]=inf; }D[1]=0;flag[1]=1;v=1; for(k=1;k<n;k++){ for(i=1;i<=n;i++)if(!flag[i]){ if(map[v][i]<D[i]) D[i]=map[v][i]; } mi=inf; for...
        阅读全文
            
摘要:矩阵相乘模板#include <cstdio>#include <cstring># define ld __int64struct Matrix{	ld a[2][2];	void init()	{ a[0][0]=a[1][0]=a[0][1]=1; a[1][1]=0;	}};Matrix matrix_mul(Matrix a,Matrix b){	int i,j,k;	Matrix ans;	for(i=0;i<2;i++)	{ for(j=0;j<2;j++) { ans.a[i][j]=0; for(k=0;k<2;k++) ans.a[
        阅读全文
            
摘要://这里lca是要开两倍空间的!!不然显示超时。。。。//因为RMQ&&LCA与郭华阳论文中不太一样,但思想是一样的 1(1) 1 / \ / | \ 2(2) 3(5) 2 3 4 / \ \ / \ 4(3) 5(4) 6(6) 5 6tot :1 2 3 4 5 6 7 8 9 10 11num :1 2 4 2 5 2 1 3 6 3 1(遍历 过程中节点的值)F[] :1 2 4 5 3 6B[] :1 2 3 2 4 2 1 5 6 5 1 深搜的路径中记录的时间...
        阅读全文
            
摘要:#include<string.h>#include<stdio.h>#include<math.h>const int MAX=200005;int min(int a,int b){return a<b?a:b;}int dp[MAX][20],a[MAX];int n,k,val[MAX];int LOG[MAX];void Make_Rmq(int n,int b[]){	int i,j;	for(i=1;i<=n;i++) dp[0][i]=b[i];	for(i=1;i<=LOG[n];i++)	{ int limit=n+1-
        阅读全文
            
摘要:终极模板View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int N = 10010;const int M = 100010;int min(int a,int b){ return a>b?b:a;}struct EDGE{ int to,next,id;}edge[2*M];int n,m,tot,tdfn,nbridge;int head[N],vis[N],low[N],dfn[N],bridge[M];void 
        阅读全文
            
 
                    
                
 
 浙公网安备 33010602011771号
浙公网安备 33010602011771号