
ACM算法
文章平均质量分 53
下一秒升华
重新捡起荒废已久的博客...
展开
-
二分图问题各类变形详解
这几天在琢磨着二分图的问题,二分图是图论算法中很基本的一个问题,其本身有很多的变种问题,二分图最大匹配,最小顶点覆盖,最小路径覆盖,最大独立集等等,但是万变不离其宗,其本质我发现最后都可以用一个模板解决。下面就说下我学习二分图的步骤。至于二分图的概念,请参考我的博文——1.二分图最大匹配原创 2014-11-29 13:52:23 · 1194 阅读 · 1 评论 -
hdu 3308 线段树+区间合并
#include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1c原创 2015-11-01 16:31:13 · 323 阅读 · 0 评论 -
数字各位相加的规律
给出一个数,12345.现在有一个操作12345=>1+2+3+4+5=15=>1+5=6.则f(12345)=6该操作总结为:不断将各个数字相加,知道变成个位数。用模拟比较耗时,用公式可以O(1)得到f(n)=(n-1)%9+1原创 2015-11-04 20:36:41 · 3152 阅读 · 0 评论 -
hdu 4501 多维背包
直接将01背包搬到多维背包不能想当然,有两个细节需要注意下。1.多个限制条件不能直接放到for循环中限制,因为各个状态是相互不限制的,放到for循环变量中限制是与的关系,放到{}中的限制是或的关系。错位代码:for(int i=0;i<n;i++) for(int j=v1;j>=a[i];j--) for(int p=v2;p>原创 2015-08-02 12:33:07 · 590 阅读 · 0 评论 -
欧几里德与扩展欧几里德算法
转载自http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示转载 2015-05-25 01:49:02 · 475 阅读 · 0 评论 -
从一道题目看蓝桥杯与ACM的区别
我不讨论蓝桥杯的好坏,也不吹捧acm,就从一道题目来看两者的区别。当然我并不是用前者的一道简单题和World final的真题来进行比较,不然就没有意义了,这篇博客的意义就在于前者和后者思考问题思路的不同之处。废话说完,看题。蓝桥杯某题:一副扑克牌,去掉大小王,剩52张牌,均分给4人,每人13张牌,若不计花色,则这13张牌的可能序列有多少种?-->这原本是一道经典的多重集组合问题,用dp求解(原创 2015-06-06 00:46:25 · 14095 阅读 · 2 评论 -
hihocoder1051 补提交卡 贪心水题 Java A题试水
上Java课无聊,只有Eclipse,顺便熟悉一下Java语法。 原来用java提交主类必须命名为class Main,不然会报CE,略醉。import java.lang.reflect.Array;import java.util.Arrays;import java.util.Scanner;public class Main { /** * @p原创 2015-04-30 11:04:38 · 789 阅读 · 0 评论 -
hihocoder 1122 二分图进阶
之前遇到的二分图问题,都有一个特点,即严格的区分了左右点集,这样形成了一个严格意义的二分图,而最近遇到一些并不可以准确区分左右点集的二分图,以此题为例记录一下新的解法。方法还是 匈牙利算法 ,主要就是用一个vector来记录每个点相关的点,而不是直接连边,听某王说也可以添加边集数组来解,其实vector就可以理解为边集数组。至于hihocoder前几的大牛以及度娘的解法,也可以使用bfs来寻找之前原创 2015-04-29 20:05:17 · 516 阅读 · 0 评论 -
最短路模板 Dijkstra+Floyd+SPFA
Dijkstra和Floyd时要注意重边。Dijkstra#define inf 0x3fffffff#define M 105int dist[M], map[M][M], n;bool mark[M];void init (){ int i, j; for (i = 1; i <= n; i++) //i==j的时候也可以初始化为0,只是有时候不合适 for (转载 2015-04-07 19:30:15 · 472 阅读 · 0 评论 -
线段树 成段更新区间操作
poj一道区间更新的裸体,区间加值。#include #include #include #include #include using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=100010;__int64 sum[maxn<<2];__int64 lazy[m原创 2015-01-31 16:55:02 · 473 阅读 · 0 评论 -
hdu1003 Max sum&hdu1231 最大连续上升子序列
大一时随便水题时碰到了hdu1003,大抵是初学,看了别人的代码后来自己也A掉了,但是没有了解思想。现在看来又有了新的收获。这应该是刘汝佳的一道将算法复杂度的例题,给出了分治O(nlogn),预处理O(n^2),朴素O(n^3)的算法并进行比较。题目大意是给出一串数字a[1]~a[n],要求出这串数字中和最大的子串a[i]+..a[j],并输出i,j。分治算法没去看,先给出O(n^2)原创 2014-12-06 13:58:08 · 622 阅读 · 0 评论 -
并查集
并查集是一种高效的数据结构,应用也很广。大一时候简单看了别人的并查集模板,于是生搬硬套过来也A了几道并查集的题目,但是对于其中的一些细节还是不太了解。如今再来看看并查集,有了些新的收获。首先是初始化根节点par数组和对应的rank数组。如果是简单的题目,rank其实可以省略,但是rank使得并查集算法更高效,且防止了树的退化。int par[max_n];int rank[max_n原创 2014-12-04 18:01:21 · 485 阅读 · 0 评论 -
线段树&树状数组学习整理
线段树是典型的数据结构问题。之前没学数据结构的时候总是被卡时间,需要用数据结构来优化。首先对比两棵树:树状数组象征性的lowbit,采用二进制的特点巧妙性,空间消耗量低,代码简单。线段树则是解决问题的类型比较多,凡是能用树状数组解决的都能用线段树解决。但是代码量较大,更难理解。树状数组一般题型:动态求连续区间和,逆序数。线段树一般题型:连续区间sum及其他维护信息(max min原创 2014-12-01 20:48:03 · 701 阅读 · 0 评论 -
hdu 1045 Fire Net&二分图解法
Fire Net题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045之前做了几个二分图的题目,以为二分图仅此而已了,今天经过某王的提醒才知道二分图题目的难点在于如何建图。其实之前听华理某队长介绍时就得知图论题目大多是套模板,但是难就难在你不知道这是一道图论题,当时也没太在意。遥想上海邀请赛,似乎有这道题目的原题再现,没有A掉甚是可惜。这原创 2014-11-30 14:14:08 · 636 阅读 · 0 评论 -
二分图最大匹配
算法:ACM二分图匹配 HDU2063题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Problem DescriptionRPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只转载 2014-11-27 16:45:35 · 558 阅读 · 0 评论 -
C++ 快速幂取模+大数相乘取模
ll qmul(ll x, ll y, ll mod) // 乘法防止溢出, 如果p * p不爆LL的话可以直接乘; O(1)乘法或者转化成二进制加法(快速加){ ll ret = 0; while(y) { if(y & 1) ret = (ret + x) % mod; x = x * 2 % mod;原创 2016-05-04 21:43:18 · 8029 阅读 · 1 评论