Fork me on GitHub

06 2014 档案

摘要:ll random(ll n) { return (ll)((double)rand()/RAND_MAX*n + 0.5); } ll pow_mod(ll a,ll p,ll n) { if(p == 0) return 1; ll ans = pow_mod(a,p/2,n); ans = ans*ans%n; if(p%2) ... 阅读全文
posted @ 2014-06-30 21:45 whatbeg 阅读(313) 评论(0) 推荐(0)
摘要:原题: URAL 1091 http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:要求找出K个不同的数字使他们有一个大于1的公约数,且所有的数字都不能大于一个指定的数字S。 解法:可以考虑每个S内的素数,此素数和它的所有倍数构成一个集合,则可以在这 阅读全文
posted @ 2014-06-29 23:06 whatbeg 阅读(253) 评论(0) 推荐(0)
摘要:原题: UVA 1169 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3610大白书上的原题。代码:#include #include #include ... 阅读全文
posted @ 2014-06-29 16:56 whatbeg 阅读(200) 评论(0) 推荐(0)
摘要:原题:UVA 1172 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3613动态规划问题。定义: dp[i] = 右岸前i个村庄(m岸)能够与左岸(n岸)... 阅读全文
posted @ 2014-06-29 12:41 whatbeg 阅读(366) 评论(0) 推荐(0)
摘要:设两只青蛙跳了t步,则此时A的坐标:x+mt,B的坐标:y+nt。要使的他们在同一点,则要满足: x+mt - (y+nt) = kL (p是整数) 化成: (n-m)t + kL = x-y (L > 0) 则变成求解同余方程: (n-m)t ≡ (x-y) mod L ,用扩展gcd解决。 且此 阅读全文
posted @ 2014-06-29 02:12 whatbeg 阅读(347) 评论(0) 推荐(0)
摘要:定义:dp[i][j] 表示 在前i个数中,使整个gcd值为j时最少取的数个数。 则有方程: gg = gcd(a[i],j) gg == j : 添加这个数gcd不变,不添加, dp[i][j] = dp[i-1][j] gg != j: t添加,更新答案, dp[i][gg] = dp[i-1] 阅读全文
posted @ 2014-06-29 01:47 whatbeg 阅读(391) 评论(2) 推荐(0)
摘要://函数计算欧拉函数 int ola_phi(int n) { int m = (int)sqrt(n+0.5); int ans = n; for(int i=2;i 1) ans = ans/n*(n-1); } //筛出欧拉函数表 int phi[N]; void phi_table(int n) { for(int i=2;i<=n;i+... 阅读全文
posted @ 2014-06-28 21:45 whatbeg 阅读(601) 评论(0) 推荐(0)
摘要:ll exgcd(ll a,ll b,ll &x,ll &y) { if(!b) { x = (ll)1,y = (ll)0; return a; } ll r = exgcd(b,a%b,x,y); ll t = x; x = y; y = t - a/b*y; return r; } //计算模... 阅读全文
posted @ 2014-06-28 21:39 whatbeg 阅读(499) 评论(0) 推荐(0)
摘要:ll exgcd(ll a,ll b,ll &x,ll &y) { if(!b) { x = (ll)1,y = (ll)0; return a; } ll r = exgcd(b,a%b,x,y); ll t = x; x = y; y = t - a/b*y; return r; } //n个方... 阅读全文
posted @ 2014-06-28 21:30 whatbeg 阅读(472) 评论(0) 推荐(0)
摘要:1.扩展欧几里得算法 2.快速幂法 阅读全文
posted @ 2014-06-28 21:24 whatbeg 阅读(265) 评论(0) 推荐(0)
摘要:原题: HDU 3362http://acm.hdu.edu.cn/showproblem.php?pid=3362开始准备贪心搞,结果发现太难了,一直都没做出来。后来才知道要用状压DP。题意:题目给出n(n #include #include #include #include #define M... 阅读全文
posted @ 2014-06-27 21:38 whatbeg 阅读(404) 评论(0) 推荐(0)
摘要:原题 HDU 3363http://acm.hdu.edu.cn/showproblem.php?pid=3363给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半。解法: 把串想象成一个环,只要满足H跟T都为偶数个,那么就可以做一条过圆心的直线把H跟T平分掉,过直线,... 阅读全文
posted @ 2014-06-27 20:14 whatbeg 阅读(294) 评论(0) 推荐(0)
摘要:原题: HDU 3366 http://acm.hdu.edu.cn/showproblem.php?pid=3366本来用贪心去做,怎么都WA,后来看网上原来是一个DP题。首先按P/Q来做排序,即P越大,Q越小就越好,这样可以确保先选最优的路走。dp[i][j]表示已经到了第i条路(说明前i-1条... 阅读全文
posted @ 2014-06-27 19:27 whatbeg 阅读(265) 评论(0) 推荐(0)
摘要:概率计算:P(某set) =令: 和 现在考虑:1.考虑某个集合,再加一个概率为Pi的朋友后能不能使总概率提高。即:由公式可知, 如果 S 0,则可以加入这个朋友。2.如果要加一个朋友有两个候选的,其概率分别为Pi,Pj,(设Pi 0. 如果S pj 时可以使Δi - Δj > 0,即P较大... 阅读全文
posted @ 2014-06-20 18:17 whatbeg 阅读(234) 评论(0) 推荐(0)
摘要:一些递推关系如f(n) = af(n-1)+bf(n-2)+...+tf(n-k)等,在n很大的时候,O(n)的算法都不能满足要求的时候,往往可以化为矩阵快速幂来做,复杂度可以降为O(logn),大大减少了运行时间。 如何将一个递推关系式化为矩阵呢? 比如这样一个递推关系: f(n) = 2*f(n 阅读全文
posted @ 2014-06-16 10:12 whatbeg 阅读(512) 评论(0) 推荐(0)
摘要:矩阵快速幂其实跟普通快速幂一样,只是把数换成矩阵而已。模板,两种写法,亲测可用://made by whatbeg//2014.6.15struct Matrix{ int m[3][3];};Matrix Mul(Matrix a,Matrix b){ Matrix c; mem... 阅读全文
posted @ 2014-06-15 23:45 whatbeg 阅读(3640) 评论(0) 推荐(1)
摘要:A.方老师和缘分 http://www.cnblogs.com/whatbeg/p/3765621.htmlB.方老师和农场 http://www.cnblogs.com/whatbeg/p/3765624.htmlC.方老师炸弹 http://www.cnblogs.com/whatbeg/p/3... 阅读全文
posted @ 2014-06-15 10:39 whatbeg 阅读(367) 评论(1) 推荐(0)
摘要:即求从起点到终点至少走K条路的最短路径。用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大于K条边的当做K条边来处理就好了。求最短路的三个算法都可以做,我这里用的是SPFA,比较简洁。代码:#... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(352) 评论(0) 推荐(0)
摘要:做法:如果有ab的有向边,连好所有边后,找入度为0的点作为起点,将其赋为最小的价值888,然后其所有能到的端点,价值加1,加入队列,删去上一个点,然后循环往复,直到队列为空,即每个点都赋予了一个权值为止。代码:#include #include #include #include #include ... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(299) 评论(0) 推荐(0)
摘要:判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在)。将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有,则需要找一个字典序最小的点开始生成这条链,否则以起点开始生成链,起点即为出度比入度大1的点。欧拉路径是... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(388) 评论(0) 推荐(0)
摘要:最小生成树变形。题目已经说得很清楚,要求到达每个房间,只需求一个最小生成树,这时边权和一定是最小的,并且那k个房间一定与所有点都有通路,即一定都可以逃脱。但是有可能当所有点都有了该去的安全房间以后,安全房间之间并不需要连边了,这样就会变成多个树,不好处理。想一想,既然不需要连边了,也就是边权不再增加... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(341) 评论(0) 推荐(0)
摘要:二分图最大匹配的匈牙利算法模板题。由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3)。代码:#include #include #include #include #include #in... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(506) 评论(0) 推荐(1)
摘要:题意:求有向图的往返最短路的最长长度。分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来。考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果。所以此题为求两次最短路。代码:#include #include #include #include #in... 阅读全文
posted @ 2014-06-15 10:36 whatbeg 阅读(374) 评论(0) 推荐(0)
摘要:1.易知,树上两点的距离dis[u][v] = D[u]+D[v]-2*D[lca(u,v)] (D为节点到根节点的距离)2.某条边权值一旦改变,将会影响所有以v为根的子树上的节点到根节点的距离,很明显,DFS一遍后以v为根的子树在DFS序列中是连续的一段,及转化为区间更新问题,可以用树状数组。做法... 阅读全文
posted @ 2014-06-15 10:33 whatbeg 阅读(630) 评论(0) 推荐(0)
摘要:给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。此题因为是无自环无重边,所以是简单图。用判定简单图可图化的Havel-Hakimi定理。Havel-Hakimi定理:一个度序列:是简单图度序列当且仅当:是简... 阅读全文
posted @ 2014-06-15 10:33 whatbeg 阅读(349) 评论(0) 推荐(0)
摘要:Tarjan算法。1.若u为根,且度大于1,则为割点2.若u不为根,如果low[v]>=dfn[u],则u为割点(出现重边时可能导致等号,要判重边)3.若low[v]>dfn[u],则边(u,v)为桥(封死在子树内),不操作。求割点时,枚举所有与当前点u相连的点v:1.是重边: 忽略2.是树边: T... 阅读全文
posted @ 2014-06-15 10:32 whatbeg 阅读(516) 评论(0) 推荐(0)
摘要:思路:如果出现了一个强连通分量,那么走到这个点时一定会在强连通分量里的点全部走一遍,这样才能更大。所以我们首先用Tarjan跑一遍求出所有强连通分量,然后将强连通分量缩成点(用到栈)然后就变成了一个DAG(有向无环图),然后跑一遍DFS,不断加上遍历点的权值,如果到了网吧,则更新一遍答案,因为可以出... 阅读全文
posted @ 2014-06-15 10:32 whatbeg 阅读(348) 评论(0) 推荐(0)
摘要:这题原来以为是某种匹配问题,后来好像说是强连通的问题。做法:建图,每个方老师和它想要的缘分之间连一条有向边,然后,在给出的初始匹配中反向建边,即如果第i个方老师现在找到的是缘分u,则建边u->i。这样求出所有的强连通分量,每个强连通分量中方老师和缘分的数目一定是相等的,所以每个方老师一定可以找到与他... 阅读全文
posted @ 2014-06-15 10:31 whatbeg 阅读(426) 评论(0) 推荐(0)
摘要:首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2。这里不再证明,可以画个图看一下。(简单说明一下,首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通... 阅读全文
posted @ 2014-06-15 10:31 whatbeg 阅读(499) 评论(0) 推荐(0)
摘要:这题其实就是一个求数组中第K大数的问题,用快速排序的思想可以解决。结果一路超时。。原来要加输入输出优化,具体优化见代码。顺便把求数组中第K大数和求数组中第K小数的求法给出来。代码:/** this code is made by whatbeg* Problem: 1099* Verdict: Ac... 阅读全文
posted @ 2014-06-15 00:24 whatbeg 阅读(620) 评论(0) 推荐(0)
摘要:这题给的一个教训:Codeforces没有超时这个概念。本来以为1000*(1000+1)/2*10*10要超时的。结果我想多了。这题由于k层都可能有关系,所以建一个图,每两个点之间连边,边权为n*m和他们之间的差值*w的最小值,然后求一个最小生成树就可以得出结果。且可以证明不会存在环。由于边比较稠... 阅读全文
posted @ 2014-06-14 14:16 whatbeg 阅读(440) 评论(0) 推荐(0)
摘要:算法思想:如果存在最小环,会在编号最大的点u更新最短路径前找到这个环,发现的方法是,更新最短路径前,遍历i,j点对,一定会发现某对i到j的最短路径长度dis[i][j]+mp[j][u]+mp[u][i] != INF,这时i,j是图中挨着u的两个点,因为在之前最短路更新过程中,u没有参与更新,所以... 阅读全文
posted @ 2014-06-11 20:10 whatbeg 阅读(1313) 评论(0) 推荐(0)
摘要:题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a k (1) 要么是SUM(Xi) (a k,也就是T(a-1)-T(a+b) = K.不存在这个序列的情况即为出现负环,所以这题建图后只需判断有无负环即可。这里用Bellman-Ford算法判负环注意:(1)a-1有可能为0,a... 阅读全文
posted @ 2014-06-11 19:22 whatbeg 阅读(314) 评论(0) 推荐(0)
摘要:题意就是要求第K短的路的长度(S->T)。对于K短路,朴素想法是bfs,使用优先队列从源点s进行bfs,当第K次遍历到T的时候,就是K短路的长度。但是这种方法效率太低,会扩展出很多状态,所以考虑用启发式搜索A*算法。估价函数 = 当前值 + 当前位置到终点的距离,即F(p) = G(p) + H(p... 阅读全文
posted @ 2014-06-10 23:50 whatbeg 阅读(246) 评论(0) 推荐(0)
摘要:算法思想:如果没有负权回路,dis数组应该会在n-1次松弛之后结束。算法复杂度:O(n*m)。比Dijkstra算法复杂度要高。代码:bool Bellman_Ford(int s){ int i,j,k; for(i=0;i dis[j] + G[k].w) ... 阅读全文
posted @ 2014-06-10 22:58 whatbeg 阅读(753) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3398这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html第一种,贪心算法:贪心算法直接套一个最小支配集模板就可以了,我不能证明这样是正确的,但是能AC代码:#in... 阅读全文
posted @ 2014-06-08 21:10 whatbeg 阅读(1073) 评论(0) 推荐(0)
摘要:1.基本概念对图G=,最小支配集:从V中取尽量少的点组成一个集合,使得V中剩余的点都与取出来的点有边相连最小点覆盖:从V中取尽量少的点组成一个集合,使得E中所有边都与取出来的点相连最大独立集:从V中取尽量多的点组成一个集合,使得这些点之间没有边相连2.贪心法求树的最小支配集,最小点覆盖,最大独立集模... 阅读全文
posted @ 2014-06-08 19:09 whatbeg 阅读(2852) 评论(1) 推荐(1)
摘要:一、基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图... 阅读全文
posted @ 2014-06-08 17:00 whatbeg 阅读(974) 评论(0) 推荐(2)
摘要:一、“换边”算法用Kruskal求最小生成树,标记用过的边。求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就是次小的生成树。可以证明:最小生成树与次小生成树之间仅有一条边不同。这样相当于运行m次Kruskal算法。复杂度O(m^2)示例代码:int Krus... 阅读全文
posted @ 2014-06-07 19:31 whatbeg 阅读(1723) 评论(0) 推荐(0)
摘要:图G是欧拉图,即存在欧拉回路的条件::smile:1.图是联通的2.对于无向图,奇度数点个数为0。对于有向图,每个顶点出度等于入度。欧拉回路算法模板(链式前向星和DFS实现):int ans[N];int k = 0;int vis[2*M];void DFS(int now){ for(in... 阅读全文
posted @ 2014-06-07 10:46 whatbeg 阅读(757) 评论(0) 推荐(0)
摘要:定理1:在一个具有n个顶点的无向连通图G中,如果任意两个顶点的度数之和大于n,则G具有Hamilton回路。此条件为充分条件定理2:设图G = ,是Hamilton图,则对于v的任意一个非空子集S,若以|S|表示S中元素数目,G-S表示G中删除了S中的点以及与这些点关联的边后得到的子图,则满足G-S... 阅读全文
posted @ 2014-06-07 09:46 whatbeg 阅读(3915) 评论(0) 推荐(0)
摘要:前几天无意中找到了大前研一先生和柳井正先生合著的《放胆去闯》,首先书名吸引了我,然后我翻了几页,感觉还不错,所以借来看了看,在看的过程中逐渐吸收到了一些没有接触到的见解,也感受到了自己眼界的逐渐开阔,感觉收益颇丰,于是我准备写一篇读后感。我认为,这本书要传达的最重要的几个理念如下:1.当今日本社... 阅读全文
posted @ 2014-06-06 13:11 whatbeg 阅读(666) 评论(0) 推荐(0)
摘要:1.邻接表(vector向量法)vector G[N];int Search_Path(int s){ for(int i=0;i#include #include #include #include using namespace std;#define N 1007int path[N][... 阅读全文
posted @ 2014-06-04 14:27 whatbeg 阅读(427) 评论(0) 推荐(0)