-
[综合] 等比数列二分求和取模
Sn=a+a2+...+an 要求Snmodp如果用公式算,可能溢出,因此用二分法求1)若n是偶数Sn=a+...+a^(n/2)+a^(n/2+1)+a^(n/2+2)+...+a^(n/2+n/2) =(a+...+a^(n/2))+a^(n/2)*(a+...+a^(n/2))=Sn/2+a^...
107
热度 -
[综合] 欧几里得算法及其应用
1)求最大公约数 intgcd(inta,intb) {if(b==0)returna;returngcd(b,a%b); } 2)求最小公倍数 intlcm(inta,intb) {returna*b/gcd(a,b); } 3)扩展欧几里得算法 求ax+by=c的方程的解: 先求出ax+...
98
热度 -
[综合] POJ 2115 C Looooops (扩展欧几里得算法)
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> usingnamespacestd; typedeflon...
15
热度 -
17
热度 -
[综合] POJ 1006 Biorhythms .
裸的中国剩余定理 求三个数的周期就是求他们的最小倍数 而且这三个数正好互素,所以肯定是中国剩余定理 #include<iostream> usingnamespacestd; intgcdEx(inta,intb,int&x,int&y) {//求ax+by=gcd(a...
32
热度 -
[综合] 中国剩余定理一般情况
给定正整数n1,n2,...,nk(未必两两互质),要求找到x,满 足x≡ai(modni)(i=1,2...k) x≡a1(modn1) x≡a2(modn2) ........... 即n1,....nk之间不一定互质 那便是解k个线性方程,如下 x+u*n1=a1 x-v*n2=a2 .....
40
热度 -
6
热度 -
[综合] 最小生成树算法(Prim+Kruskal)
Prim算法: 首先任取一个点u加入最小生成树 1)更新从其他点v出发到u的距离储存在dist中 2)然后选一个dist值最小的点u(1)再收入到最小生成树中,再重复1) 当点全部收录最小生成树时,算法结束 代码如下: #include<iostream> #include<c...
73
热度 -
[综合] Bellman_Ford 模板
可以解决有负权边的图,但不能解决有负权回路的图(有负权回路的最短路本来就不存在嘛) 思路: 假设一共有n个点 那么从u~v最多经过n-1个点便肯定能找出最短边(因为最多把其他的点全走一遍就知道最短路径了) 所以算法就是: 从u(起点)出发,经过1个点到v点试试,如果更加小,就更新一下dist 再经过...
85
热度 -
102
热度 -
137
热度 -
88
热度 -
62
热度 -
94
热度 -
[综合] Tarjan求强连通(缩点)
#include<iostream> #include<cstdio> #include<vector> #include<stack> #include<cstring> #include<algorithm> usingna...
98
热度 -
[综合] 求桥和割点的Tarjan算法
low[u]定义为u或者u的子树中能够通过非父子边追溯到的最早的节点的DFS开始时间 dfn[u]表示dfs下u的开始时间 割点:无向连通图中,如果删除某点后,图变成不连通,则称该点为割点。 桥:无向连通图中,如果删除某边后,图变成不连通,则称该边为桥。 判断割点方法: (1)u为树根,且u有多...
27
热度 -
[综合] 求无向图连通图点双连通分支
点双连通分支:不包含割点的极大连通子图 算法思路: 建立一个栈,存储当前双连通分支,在搜索图时,每找到一条树枝边或反向边(连到树中祖先的边),就把这条边加入栈中。如果遇到某树枝边(u,v)满足dfn(u)<=low(v),说明u是一个割点,此时把边从栈顶一个个取出,直到遇到了边(u,v),取...
48
热度 -
[综合] 求无向连通图边双连通分支
边双连通分支:不包含桥的极大连通子图 算法思路: 只需在求出所有的桥以后,把桥边删除,原图变成了多个连通块,则每个连通块就是一个边双连通分支。桥不属于任何一个边双连通分支,其余的边和每个顶点都属于且只属于一个边双连通分支。 #include<iostream> #include&l...
33
热度 -
[综合] POJ 2449 Remmarguts' Date A* -
求第s~t第k短的路 先求出所有点到t的最短路径,这可以通过保存逆邻接表来求 这是求出h(u)的精确值dist[u],g()就是离s(起点)点经过多少距离 从优先队列里取出f最小的点,该点扩展数加1,扩展他连接的点,放入优先队列 原理类似Dijkstra,扩展到的点就是s出发最短路径,第i次扩展到u...
77
热度 -
[综合] POJ 2286 UVA 1343 The Rotation Game IDA*
以前看刘汝佳的方法写过,现在再写一遍 以下是自己意淫的IDA* g()是旋转的次数; h()的求法:每次移动最多只会使得中央区域包含的数字种类减少1种。求出中央区域个数最多的那个数字的个数n,要达到中央区域数字都相同,至少需要8-n次操作,此即估价函数值 //12 //34 //567891011...
57
热度