算法
文章平均质量分 77
xinge008
这个作者很懒,什么都没留下…
展开
-
数据结构之树状数组
package 树状数组; //低位操作 //修改操作 //求和 //删除 //插入 //取第K小 public class 模版 { // 点更新:向上路径更新关键字; // 区间更新:向下路径更新关键字; // 更新区间查询点:将inc与get方法互换。 //要注意一个超时陷阱:x==0的情况 static int N; static int c[]=new原创 2012-08-07 16:07:59 · 327 阅读 · 0 评论 -
spoj8281
题意是:给出一组数字,然后让你判断在正整数中不能由这些数字表示的数的个数,感觉就是一个BFS,可是怎么gao都不行就是wa,后来在大神提示下,明白了SPFA可破,哎,我那可怜的BFS怎么就是过不了,望路过的大神不吝赐教。 //用最短路模拟求解不同余数的最小数,队列中存的是小于data[0]的不同余数,每次将不同的余数加入队列 #include #include #include原创 2012-08-28 14:57:20 · 421 阅读 · 0 评论 -
最短路模板BF和SPFA,poj3259测
分别用BF和SPFA处理带负权图,自己写的模板,哎也WA 了N多次呀,测试题目是poj3259 Bellman-ford: #include #include #include #define MAX 1<<28 using namespace std; const int maxn=7010; int N,M,W; int dis[maxn]; int edgenum; struc原创 2012-08-18 20:35:32 · 639 阅读 · 0 评论 -
poj3026
题意:就是S去感染A,然后A就变为了S在一起去感染其他的A,转变思路就是迷宫中全都是S,求把他们连起来的最小生成树 具体做法:先建图,然后BFS求出S之间的距离存入map[][]里在求解最小生成树就可以了。 2 6 5 ##### #A#A## # # A# #S ## ##### 7 7 ##### #AAA### # A# # S ### # # #AAA#原创 2012-08-11 21:48:31 · 580 阅读 · 0 评论 -
hdu1312基础的搜索
DFS的两种实现:import java.util.Scanner; public class hdu1312DFS { static char map[][]=new char[22][22]; static int x,y; static int inc[][]={{1,0},{0,1},{-1,0},{0,-1}}; static int ans; static void in原创 2012-08-11 18:15:07 · 519 阅读 · 0 评论 -
种类为两种时,并查集的解题应用poj1703和hdu1829
将两种的种类并查集转化为普通并查集 例题:poj 1703 和 hdu 1829 当有N各节点且他们之间只有两种关系时,可以再虚拟出N个节点,对这2*N个节点进行操作即可 //hdu1829 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import j原创 2012-08-07 14:51:18 · 426 阅读 · 0 评论 -
poj1751已知某些边建好的情况下求最小生成树中其他需要建的边
poj1751: 题意:已知某些边建好的情况下求最小生成树中其他需要建的边,输出其起点和终点 这道题目是spj,对输出的顺序没有要求 我用java写一直MLE,百思不得其解,然后又用C++写了一遍就AC了。 这次终于知道了在结构体内写比较函数要比在外面写cmp快的多 第二次在外面写的cmp直接卡时间超低空飘过,呵呵 不多说了,看代码吧 //==============原创 2012-08-10 18:48:16 · 2183 阅读 · 1 评论 -
最小生成树专题
今天系统的做了一下有关最小生成树的题目,都挺水的,水水更健康嘛 1.hdu1233,中文题目,不再赘述了,很裸的MST import java.util.Arrays; import java.util.Scanner; public class hdu1233 { static int roadnum; static int max=10010; static int parent[]原创 2012-08-09 18:45:11 · 523 阅读 · 0 评论 -
hdu1394求最小逆序----树状数组解决
首先用树状数组求出初始序列的逆序对数,再根据变化特征,因为所有的数都是在1 ~ n(由于用到树状数组每个输进来的数都加了1) 的,所以每次把末尾的数掉到序列前面时,减少的逆序对数为n-1-A[i] ,增加的逆序对数为A[i]-1 ,这样就可在所有的序列中找出含有逆序对最少的了! import java.util.Arrays; import java.util.Scanner;原创 2012-08-07 16:19:00 · 530 阅读 · 0 评论 -
poj3368--线段树统计区间的最大频率
今天又做了点图论和线段树的题目,比较有感触的就是这道,一开始感觉有点像hotel那道题,感觉记录区间的左右值和左右的最大频率以及总的最大频率即可,最后比较取最大, 后来在初始化的时候RE了一次,然后就AC了,感觉线段树终于入门了 import java.io.*; public class Main { static StreamTokenizer in = new Strea原创 2012-08-08 19:53:57 · 771 阅读 · 0 评论 -
在一些边已建的情况下求最小生成树hdu1102
hdu1102 :题意是在一个无向图中有一些边已经建好求最小生成树,思路很简单就是将已建的道路权值变为0即可。 我用的是kruskal求MST import java.util.Arrays; import java.util.Scanner; public class Main { static int max=10010; static int parent[]=new int[ma原创 2012-08-08 22:32:43 · 1715 阅读 · 0 评论 -
并查集题目推荐
POJ 1611 The Suspects 最基础的并查集 POJ 2524 Ubiquitous Religions 最基本的并查集 POJ 1182 食物链 并查集的拓展 注意: 只有一组数据; 要充分利用题意所给条件:有三类动物A,B,C,这三类动物的食物链 构成了有趣的环形。A吃B, B吃C,C吃A。也就是说:只有三个group POJ 2492转载 2012-08-07 15:07:24 · 611 阅读 · 0 评论 -
ural1521-线段树解约瑟夫问题
使用sum[]数组来记录当前区段的个数 pushup来更新子节点与父节点的关系,实现很简单,但是要注意每次节点个数在减少,注意查询时要求的长度要模一下当前节点的个数 #include #include #include using namespace std; const int maxn=100010; int sum[maxn<<2]; void pushup(int idx原创 2012-08-07 19:29:22 · 738 阅读 · 0 评论 -
poj2481-树状数组的应用
//***********************************************解决思想************************************ 对于这种有两个关键字并且具备单调性的问题,使用树状数组优化的一般方法是固定一个关键字(或者区间的端点),然后查询另一个关键字前n项和的性质确定当前对象的答案。 1.此题先按s由小到大排序,如果s相同根据t由大原创 2012-08-07 16:11:56 · 576 阅读 · 2 评论 -
二分匹配之一
二分图的最大匹配: 匈牙利算法 DFS实现的匈牙利算法是每一次寻找一条增广路径 时间复杂度是O(n^3),复杂度偏高,通过改进优化在寻找增广路经的时候同时找多条不相交的增广路经 在寻找路径的每一个阶段,找到的增广路经都具有相同的长度,时间复杂度是O(n^0.5*m). 模板:DFS实现: //DFS实现增广,复杂度O(n^3); const int maxn=550; bo原创 2012-10-09 22:20:06 · 503 阅读 · 0 评论