Fork me on GitHub
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 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 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 1.扩展欧几里得算法 2.快速幂法 阅读全文
posted @ 2014-06-28 21:24 whatbeg 阅读(254) 评论(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 阅读(389) 评论(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 阅读(285) 评论(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 阅读(247) 评论(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 阅读(223) 评论(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 阅读(480) 评论(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 阅读(3564) 评论(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 阅读(360) 评论(1) 推荐(0) 编辑
摘要: 即求从起点到终点至少走K条路的最短路径。用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大于K条边的当做K条边来处理就好了。求最短路的三个算法都可以做,我这里用的是SPFA,比较简洁。代码:#... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 做法:如果有ab的有向边,连好所有边后,找入度为0的点作为起点,将其赋为最小的价值888,然后其所有能到的端点,价值加1,加入队列,删去上一个点,然后循环往复,直到队列为空,即每个点都赋予了一个权值为止。代码:#include #include #include #include #include ... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在)。将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有,则需要找一个字典序最小的点开始生成这条链,否则以起点开始生成链,起点即为出度比入度大1的点。欧拉路径是... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 最小生成树变形。题目已经说得很清楚,要求到达每个房间,只需求一个最小生成树,这时边权和一定是最小的,并且那k个房间一定与所有点都有通路,即一定都可以逃脱。但是有可能当所有点都有了该去的安全房间以后,安全房间之间并不需要连边了,这样就会变成多个树,不好处理。想一想,既然不需要连边了,也就是边权不再增加... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 二分图最大匹配的匈牙利算法模板题。由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3)。代码:#include #include #include #include #include #in... 阅读全文
posted @ 2014-06-15 10:37 whatbeg 阅读(493) 评论(0) 推荐(1) 编辑
摘要: 题意:求有向图的往返最短路的最长长度。分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来。考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果。所以此题为求两次最短路。代码:#include #include #include #include #in... 阅读全文
posted @ 2014-06-15 10:36 whatbeg 阅读(361) 评论(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 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。此题因为是无自环无重边,所以是简单图。用判定简单图可图化的Havel-Hakimi定理。Havel-Hakimi定理:一个度序列:是简单图度序列当且仅当:是简... 阅读全文
posted @ 2014-06-15 10:33 whatbeg 阅读(329) 评论(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 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 思路:如果出现了一个强连通分量,那么走到这个点时一定会在强连通分量里的点全部走一遍,这样才能更大。所以我们首先用Tarjan跑一遍求出所有强连通分量,然后将强连通分量缩成点(用到栈)然后就变成了一个DAG(有向无环图),然后跑一遍DFS,不断加上遍历点的权值,如果到了网吧,则更新一遍答案,因为可以出... 阅读全文
posted @ 2014-06-15 10:32 whatbeg 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2。这里不再证明,可以画个图看一下。(简单说明一下,首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通... 阅读全文
posted @ 2014-06-15 10:31 whatbeg 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 这题原来以为是某种匹配问题,后来好像说是强连通的问题。做法:建图,每个方老师和它想要的缘分之间连一条有向边,然后,在给出的初始匹配中反向建边,即如果第i个方老师现在找到的是缘分u,则建边u->i。这样求出所有的强连通分量,每个强连通分量中方老师和缘分的数目一定是相等的,所以每个方老师一定可以找到与他... 阅读全文
posted @ 2014-06-15 10:31 whatbeg 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 这题其实就是一个求数组中第K大数的问题,用快速排序的思想可以解决。结果一路超时。。原来要加输入输出优化,具体优化见代码。顺便把求数组中第K大数和求数组中第K小数的求法给出来。代码:/** this code is made by whatbeg* Problem: 1099* Verdict: Ac... 阅读全文
posted @ 2014-06-15 00:24 whatbeg 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 这题给的一个教训:Codeforces没有超时这个概念。本来以为1000*(1000+1)/2*10*10要超时的。结果我想多了。这题由于k层都可能有关系,所以建一个图,每两个点之间连边,边权为n*m和他们之间的差值*w的最小值,然后求一个最小生成树就可以得出结果。且可以证明不会存在环。由于边比较稠... 阅读全文
posted @ 2014-06-14 14:16 whatbeg 阅读(426) 评论(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 阅读(1297) 评论(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 阅读(298) 评论(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 阅读(234) 评论(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 阅读(735) 评论(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 阅读(1054) 评论(0) 推荐(0) 编辑
摘要: 1.基本概念对图G=,最小支配集:从V中取尽量少的点组成一个集合,使得V中剩余的点都与取出来的点有边相连最小点覆盖:从V中取尽量少的点组成一个集合,使得E中所有边都与取出来的点相连最大独立集:从V中取尽量多的点组成一个集合,使得这些点之间没有边相连2.贪心法求树的最小支配集,最小点覆盖,最大独立集模... 阅读全文
posted @ 2014-06-08 19:09 whatbeg 阅读(2676) 评论(1) 推荐(1) 编辑
摘要: 一、基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图... 阅读全文
posted @ 2014-06-08 17:00 whatbeg 阅读(952) 评论(0) 推荐(2) 编辑
摘要: 一、“换边”算法用Kruskal求最小生成树,标记用过的边。求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就是次小的生成树。可以证明:最小生成树与次小生成树之间仅有一条边不同。这样相当于运行m次Kruskal算法。复杂度O(m^2)示例代码:int Krus... 阅读全文
posted @ 2014-06-07 19:31 whatbeg 阅读(1669) 评论(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 阅读(733) 评论(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 阅读(3670) 评论(0) 推荐(0) 编辑
摘要: 前几天无意中找到了大前研一先生和柳井正先生合著的《放胆去闯》,首先书名吸引了我,然后我翻了几页,感觉还不错,所以借来看了看,在看的过程中逐渐吸收到了一些没有接触到的见解,也感受到了自己眼界的逐渐开阔,感觉收益颇丰,于是我准备写一篇读后感。我认为,这本书要传达的最重要的几个理念如下:1.当今日本社... 阅读全文
posted @ 2014-06-06 13:11 whatbeg 阅读(650) 评论(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 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 混合三种背包问题。定义:dp[i][k]表示体积为k的时候,在前i堆里拿到的最大价值。第一类,至少选一项,dp初值全赋为负无穷,这样才能保证不会出现都不选的情况。dp[i][k] = max(dp[i][k],max(dp[i-1][k-c]+g,dp[i][k-c]))其中:dp[i][k]是不选... 阅读全文
posted @ 2014-05-31 20:58 whatbeg 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 定义:1.dp[u][1]表示u这个点设立糖果发放点且u这棵子树满足条件时的最少糖果点数2.dp[u][0]表示u这个点不设立发放点且u这棵子树满足条件时的最少糖果点数设v1,v2……vn为u的子节点,则转移方程:dp[u][1]= sum(min(dp[vi][1],dp[vi][0]) )+1;... 阅读全文
posted @ 2014-05-31 20:57 whatbeg 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 环状合并石子问题。环状无非是第n个要和第1个相邻。可以复制该行石子到原来那行的右边即可达到目的。定义:dp[i][j]代表从第i堆合并至第j堆所要消耗的最小体力。转移方程:dp[i][j]=min(dp[i][k]+dp[k+1][j]+sum[i][j]);复杂度:O(n^3)。可考虑四边形优化。... 阅读全文
posted @ 2014-05-31 20:56 whatbeg 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 将方格的摆放分成两种:1.水平摆放:此时所占的两个格子都记为1。2.竖直摆放:此时底下那个格子记为1,上面那个记为0。这样的话,每行都会有一个状态表示。定义:dp[i][s]表示考虑已经填到第i行,这一行状态为s的方法数转移:dp[i][s] = dp[i][s]+dp[i-1][s'] (s'为上... 阅读全文
posted @ 2014-05-31 20:47 whatbeg 阅读(373) 评论(0) 推荐(1) 编辑
摘要: 定义:cnt[L][K]表示长度为L,最高位为K的满足条件C的个数。首先预处理出cnt数组,枚举当前长度最高位和小一个长度的最高位,如果相差大于2则前一个加上后一个的方法数。然后给定n,计算[1,n-1]中满足条件C的数的个数。设有K位数,则不足K位的累加,然后枚举K位数的情况,从高位到低位枚举,每... 阅读全文
posted @ 2014-05-31 20:46 whatbeg 阅读(316) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页