模板
Freopen
这个作者很懒,什么都没留下…
展开
-
Kruscal
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,m;struct node{ int s,t,w; bool used; bool operator <(const node nxt)const{ return w<n...原创 2017-10-27 12:40:47 · 232 阅读 · 0 评论 -
并查集
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,m;int f[10005];int find(int now){ return f[now]!=0?f[now]=find(f[now]):now; }int main(){ int...原创 2017-10-27 12:45:05 · 191 阅读 · 0 评论 -
Dijkstra
优先队列版本#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<algorithm>using namespace std;int n,m,fir[100001],dis[100001],now,loc[100001],g[100001];struct node{ int w,t,nxt原创 2017-10-25 14:12:26 · 229 阅读 · 0 评论 -
Prim
#include<cstdio>#include<algorithm>#include<cstring>#define maxn 5005using namespace std;int n,m,cst[maxn];struct node{ int to,nxt,w;}e[400005];int fir[maxn],cnt_e;...原创 2017-10-30 13:42:14 · 306 阅读 · 0 评论 -
质因数分解
#include<cstdio>#include<vector>#define F first#define S secondusing namespace std;vector<pair<int,int> >prime;int main(){ long long n; scanf("%lld",&n); int ...原创 2017-10-23 13:35:06 · 456 阅读 · 0 评论 -
欧拉线性筛质数(线性)
#include<cstdio>#include<algorithm>#include<vector>#define maxn 10000005using namespace std;long long n;int siz;bool vis[maxn]={};vector<int>prime;int main(){ scan...原创 2017-10-23 13:47:20 · 188 阅读 · 0 评论 -
筛法求欧拉函数(线性)
#include#include#include#define maxn 10000005using namespace std;long long n,phi[maxn];int siz;bool vis[maxn];vectorprime;int main(){ scanf("%lld",&n); phi[1]=1; for(int i=2;i<=n;i++原创 2017-10-23 14:03:02 · 222 阅读 · 0 评论 -
矩阵运算
#include<cstdio> #include<cstring> #include<iostream>#include<cmath>#include<algorithm> #define mod 1000000007using namespace std; struct Mat{ int n,m...原创 2017-10-26 14:10:51 · 271 阅读 · 0 评论 -
树的先序、后序、中序非递归版
二叉树的3种遍历其实差不多,只是输出时机不一样,都是通过树根找儿子来深搜递归的。下面是三种遍历的代码:void first(int p){ if(p==0) return; printf("%d ",p); first(tree[p].l); first(tree[p].r);}void mid(int p){ if(p==0) return; mid(tr...原创 2016-10-02 10:15:51 · 226 阅读 · 0 评论 -
求树的质心
#include<cstdio>#include<algorithm>using namespace std;int n,x,y,son[101][101],cnt[101],Fa[101],size[101],sum,minx=1<<30,root;void dfs(int now){ size[now]=1; for(int i=0;i&l...原创 2017-10-31 14:10:48 · 300 阅读 · 0 评论 -
求树的直径
#include<cstdio>#include<vector>#include<algorithm>#include<cstring>#include<cctype>#define maxn 100005#define num ch-'0'using namespace std;int n,v,maxnum,loc,...原创 2017-10-31 14:15:07 · 212 阅读 · 0 评论 -
质数判定(miller-rabin)
#include<cstdio>#include<cstring>#include<cctype>#include<stdlib.h>#include<algorithm>#define LL long longusing namespace std; LL mul(LL a,LL b,LL c){ return ((a...原创 2017-10-24 14:07:23 · 267 阅读 · 0 评论 -
求最小素因子(pollard-rho)
#include<cstdio>#include<cstring>//#include<ctime>#include<algorithm>#define LL long longusing namespace std;inline LL mul(LL a,LL b,LL c){return ((a * b - (LL)((long ...原创 2018-06-23 16:40:26 · 1380 阅读 · 0 评论 -
倍增求快速幂,乘法,O(1) long long 乘法
#include<cstdio>#include<algorithm>#include<stdlib.h>#include<climits>#include<cstring>#include<ctime>#define MAXN LONG_LONG_MAX>>1using namespace std...原创 2017-10-24 14:09:02 · 1215 阅读 · 0 评论 -
gcd和lcm
#include#include#includeusing namespace std;long long gcd(int a,int b){ return !b?a:gcd(b,a%b);}int main(){ long long a,b; scanf("%lld%lld",&a,&b); long long tmp=gcd(a,b); printf("%lld %l原创 2017-10-24 14:10:24 · 251 阅读 · 0 评论 -
扩展gcd
void exgcd(long long a,long long b,long long &gcd,long long &x,long long &y){ if(!b) gcd=a,x=1,y=0; else exgcd(b,a%b,gcd,y,x), y-=a/b*x; }bool equation...原创 2017-10-24 14:11:30 · 329 阅读 · 0 评论 -
康托展开式
#include<cstdio> #include<algorithm> #include<vector> using namespace std; int fac[2505] = {1, 1 ,2 ,6 ,24 ,120 ,720, 5040, 40320 ,362880},siz; int cantor(vector<int...原创 2017-10-24 14:14:02 · 242 阅读 · 0 评论 -
n的全排列
#include#includeusing namespace std;int n,vis[11],ans[11];void dfs(int x){ if(x==n) { for(int i=0;i<n;i++) printf("%d",ans[i]); printf("\n"); return; } for(int i=1;i<=n;i++) if(!原创 2017-10-24 19:27:05 · 300 阅读 · 0 评论 -
有重复元素的全排列
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[11],ans[11];int vis[11],sum,num[11];bool check(int x,int len){ for(int i=1;i<len;i++) if(...原创 2017-10-24 19:29:44 · 998 阅读 · 0 评论 -
LCA树链法
#include#include#include#include#include#define maxn 20005using namespace std;void get(int &res){ char ch; while(!isdigit(ch=getchar())); for(res=ch-'0';isdigit(ch=getchar());res=res*10+ch-原创 2017-10-26 14:12:48 · 258 阅读 · 0 评论 -
Floyd
这是一个求图最短路径的算法,个人认为最好用也最有用的算法。 不扯那些高大上的,原创 2016-11-01 14:10:33 · 233 阅读 · 0 评论 -
中国剩余定理
#include<cstdio>#include<algorithm>#include<cstring>#include<vector>using namespace std;int n,m;vector<int>a,b;void exgcd(long long a,long long b,long long...原创 2017-10-24 19:25:45 · 187 阅读 · 0 评论 -
枚举一定条件的子集
#include#include#define maxn 100000using namespace std;int inv[maxn];void solve(int state){ for(int j=state;j;j-=j&-j) printf("%d\n",j);}int main(){ solve(2012); }原创 2017-10-25 14:07:48 · 239 阅读 · 0 评论 -
SPFA
#include<cstdio>#include<queue>#include<cstring>using namespace std;queue<int>q;int F,N,M,W,dis[5001],a,b,w,pre[5001],z,flag,g[5001],fir[5001];struct node{ int t,wt,m;}st[500001];int main()原创 2017-10-25 14:10:45 · 165 阅读 · 0 评论 -
stirling数(第一类、第二类)
#include<cstdio>#include<algorithm>#include<climits>#include<cstring>#define maxn 30using namespace std;int mod=INT_MAX;long long s[maxn][maxn];//存放Stirling数 voi...原创 2017-10-26 13:55:37 · 312 阅读 · 0 评论 -
LCA倍增法
#include#include#include#includeusing namespace std;int n,m,fa[100005],dep[100005],f[100005][20];vectorg[100005];void get(int &res){ char ch; while(!isdigit(ch=getchar())); for(res=ch-'0'原创 2017-10-26 14:11:57 · 280 阅读 · 0 评论 -
轻重链剖分
#include#include#include#define maxn 500005using namespace std;int n,m,s;int Prev[maxn*2],info[maxn],to[maxn*2],cnt_e;int fa[maxn],siz[maxn],bel[maxn],tp[maxn],dep[maxn],cnt_l;int Q[maxn],L,R原创 2017-11-03 13:30:02 · 327 阅读 · 0 评论 -
st表
#include#include#include#define maxn 100005#define dep 17using namespace std;int n,m,lg[maxn],st[dep][maxn];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&st[0][i]);原创 2017-11-03 14:02:02 · 359 阅读 · 0 评论 -
求区间乘法逆元
#include<cstdio>#include<algorithm>#define maxn 100000using namespace std;int inv[maxn];void solve(int n){//n为质数 inv[0]=inv[1]=1; for(int i=2;i<n;i++) inv[i]=(n-n/i)*inv[n%i]...原创 2017-10-25 13:57:50 · 223 阅读 · 0 评论 -
组合数
#include<cstdio>#define min(a,b) a>b?b:along long c,n,m;int main(){ while(~scanf("%lld%lld",&n,&m)){ if(n==0) return 0; m=min(m,n-m); c=1; for(long long i=n;i>n-m;i--...原创 2017-10-24 19:30:51 · 302 阅读 · 0 评论 -
高斯消元
#include#include#include#include#include#define maxn 105using namespace std;int n;double a[maxn][maxn];double x[maxn];int main(){ scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<=原创 2018-01-09 09:30:07 · 151 阅读 · 0 评论 -
矩阵乘法套线段树(动态最大子段和问题)
一个新套路,利用矩阵能将一些复杂的线性关系转换为一次矩阵乘法。求解只需求区间积。采用线段树(所以需要满足结合律)更奇特的是你可以重载矩阵乘法时内部单个元素的乘法和加法(比如说改成取max之类的)只要重载之后仍然满足结合律我自己想了一个判断方法。要A*(B*C)=(A*B)*C令A*(B*C)=D,(A*B)*C=E有D=EDij=Eijsigma(sig...原创 2018-02-27 16:22:25 · 595 阅读 · 0 评论 -
省选模拟赛Day4T3迂回
Problem Problem Problem Problem Problem Problem Problem Problem 3 迂回 (tour)(tour)(tour)(tour)(tour)(tour)【题目描述】 【题目描述】给定一有向图,边长均为 1,求 长度 小于 k的环个数 mod m 。保证 有向图中 无自环 (即 g[i,i]='N') 。什么样的环属于不同 的解, 详见样例解...原创 2018-03-07 17:02:43 · 362 阅读 · 0 评论 -
NTT任意模数模板(+O(1)快速乘)
NTT任意模数的方法其实有点取巧。两个数列每个有n个数,每个数的大小最多是10^9。如果没有模数,那么卷积过后每个位置的答案一定小于10^9*10^9*n,差不多是10^24左右那么就有一个神奇的做法,选3个乘积大于10^24的NTT模数,分别做一次,得到每个位上模意义下的答案,然后用中国剩余定理得到模上三个质数乘积的答案。因为答案显然小于三个质数乘积,那么模上三个质数乘积的答案就是这个数应该的值...原创 2018-03-07 22:38:09 · 3207 阅读 · 0 评论 -
K-D Tree
就是用一些的方法把平面按点分成若干块,方便你剪枝(这思路真暴力)因为是剪枝暴力,复杂度是O(能过),可以拿来干超级多的事情CQOI2016 : K远点对#include<cstdio>#include<cstring>#include<cctype>#include<algorithm>#include<queue>#incl...原创 2018-03-15 14:35:42 · 290 阅读 · 0 评论 -
一种按点划分,对于随机数据表现良好的非常规二维数据结构(二维KD树)
二维KD-Tree是一种将平面用一种玄学的方式分割成多份的数据结构其操作功能强大1:找最近||最远点,利用矩形区域计算最大最小可能值来剪枝,随机数据期望复杂度O(logn) ,构造数据。。。。。。不过可以用来优化求min/max之类的DP,DP式中数据应该近乎随机。2.覆盖关键点的二维线段树问题:如 BZOJ4154——IPSC2015 Generating Synergy当问题可以转化为二维平面...原创 2018-03-15 16:13:27 · 252 阅读 · 0 评论 -
最长反链
反链不是链,而是一个点的集合,保证任意两点不在一条链当中。定理:最长反链=最小链覆盖最长链=最小反链覆盖CTSC2008 祭祀:不用做传递闭包,只需将二分图中i'到i和u到v‘的权值设为inf就行了,这样一些点会被当做中间点作了传递闭包的作用同时加快速度:#include<bits/stdc++.h>#define maxn 1005#define m...原创 2018-03-10 20:21:10 · 1975 阅读 · 0 评论 -
NOI模拟赛Day1 循环小数
题意:设F(x)为1/x在K进制下的循环节长度(无则为0)。给出n个询问,每次询问一个数Qi,求ΣF(Qi) ( 1<=K<=2000 , n<=200000 ,Qi<=2000003 )有一堆结论:1:小学奥数告诉我们,对于10进制数的循环小数转分数的方法是这样的:设循环节为a1a2a3..an分数形式为:a1a2a3..an/(10^n-1)推广一下:1/Qi=a1a2...原创 2018-03-03 22:41:13 · 287 阅读 · 0 评论 -
比后一场比赛水的比赛 Bilibili Summer Camp
Bilibili Summer Camp(summer.c/cpp/pas) 时间限制:1s【题目描述】夏天到了,Bilibili的夏日活动又开始了,但是JeremyGuo忘记了自己的bilibili账号和密码,他对自己的密码做了简单的处理然后存储在了自己的电脑上。现在她有一个数的集合{S},里面的数是[2, n]范围内的正整数,由于他的密码经过了他自己的加密,所以他现在需要找找到他定义的那个唯一...原创 2018-03-17 16:42:58 · 250 阅读 · 0 评论 -
替罪羊树SCT
照着指针版的打了个数组版的,发现自己上了一节C++语法课。重构什么的,最难在于找出深度最小的需要重构的节点,毕竟多写一个函数不太优雅,数组又不像指针那么方便直接修改。如果你要传回一个变量的地址(因为你直接修改这个地址ch等等就直接跟着改了,十分方便)函数不能写 int&得写int *...............删除还是不要重构,太浪费了。。。。。。#include<cstdio&g...原创 2018-03-12 19:57:50 · 220 阅读 · 0 评论