自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(15)
  • 收藏
  • 关注

原创 二分图

二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i ∈ A, j ∈ B),则称图G为一个二分图。 二分图的判断染色法: 对未染过色的点染色,若相连的点为染色则将其染成相反的颜色,若相连的点已被染色则判断相连的点颜色是否相同,相同则

2015-05-10 12:14:10 2425

原创 字典树trie

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于1.统计,2.排序,3.保存大量的字符串优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高 基本操作:插入查找删除如给出字符串”abc”,”ab”,”bd”,”dda”,根据该字符串序列构建一棵Trie树 例题:HDU 1671 Phone List 思路:边插入边查找是

2015-04-29 21:50:27 379

原创 判断线段相交模板

double max(double a, double b){ if (a > b) return a; return b;}double min(double a, double b){ if (a < b) return a; return b;}struct Point{ double x, y;};st

2015-04-11 23:17:39 651

原创 多边形面积

点积:a·b=(x1*x2 + y1*y2)=|a||b|·cosθ 点积的结果是一个数值; 叉积:a×b=(x1*y2 - x2*y1)=|a||b|·sinθ 叉积的结果也是一个向量,是垂直于向量a,b所形成的平面,如果看成三维坐标的话是在 z 轴上,上面结果是它的模。三角形的面积: 向量a和 向量b的叉积的绝对值表示 以 向量a和 向量b 为两边形成的平行四边形的面积.即:S=∣a×b

2015-04-11 01:17:51 407

原创 STL-优先队列(priority queue)

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出的行为特征。操作函数 q.top(); //返回队列顶部的元素值,普通队列为q.front();q.pop(); //删除队列顶部的元素值q.push(); //把x元素插

2015-04-04 10:38:50 4510

原创 Flood fill种子填充(DFS求连通快)

Flood fill算法是从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法。因为其思路类似洪水从一个区域扩散到所有能到达的区域而得名。算法分为四路算法(不考虑对角线方向的节点)和八路算法(考虑对角线方向的节点)。 例题:HDOJ 1241 Oil Deposits#include<cstdio>#include<cstring>int n, m;char m

2015-03-27 21:04:55 651

原创 HDOJ 1215七夕节

Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:”你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!” 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6. 你想知道你的另一半吗?Input 输入数据的第一行是一个数字T(1

2015-03-26 22:35:15 7206

原创 最小生成树(Prime/kruskal)

构造最小生成树一般使用贪心策略,每次优先选择边权值最小的边 最小生成树的边数==点数-1 例子: HDOJ 1863 畅通工程 kruskal算法(用到并查集的知识):按边权值的大小从小到大排序,从边集中选取一条权值最小的边,若该边的两个顶点分属不同的树 ,则将其加入子图,也就是这两个顶点分别所在的 两棵树合成一棵树(通过并查集);反之,若该边的两个顶点已落在同一棵树上,则不可取

2015-03-24 21:52:28 2480

原创 拓扑排序 Topological-sort

对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序的序列,简称拓扑序列。 拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。 (1) 找到一个入度为0的顶点并输出之; (2) 从图中删除此

2015-03-23 17:36:54 1120

原创 Bellmanford

适用条件&范围1.单源最短路径(从源点s到其它所有顶点v); 2.有向图&无向图; 3.边权可正可负(如有负权回路输出错误提示); 4.差分约束系统; -算法描述 - 1.初始化:将除源点外的所有顶点的最短距离估计值 d[v] =+∞, d[s] =0; - 2.松弛操作:反复对边集E中的每条边进行松弛操作,循环N-1次(N是点数); - 3..检验负权回路:判断

2015-03-04 20:47:47 418

原创 二分查找

二分查找又称折半查找; 要求: 1.必须采用顺序存储结构; 2.必须按关键字大小有序排列; 优点:比较次数少,查找速度快,平均性能好;缺点:要求待查表为有序表,且插入删除困难;-二分查找算法就是不断将数组进行对半分割,每次拿中间元素和要查找的数进行比较;#include <iostream>using namespace std;//二分查找(非递归版本)int sea

2015-03-04 19:54:27 9308

转载 ACM必备算法列表

第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.

2015-03-02 10:04:10 4190

转载 并查集

简述并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 需要实现的操作有:合并两个集合,判断两个元素是否属于一个集合。 这里介绍的主要是普通的并查集,很多情况下使用的并查集是需要扩展的,根据使用情况的不同,有很多差别,这里仅仅是最基本的算法。复杂度T=O(n*α(n)) , 其中α(x),对于x=宇宙中原子数之和,α(x

2015-03-02 10:00:20 10352

原创 Floyd算法

可以解决负权图,适用稠密图和顶点关系密切;HDOJ2544 最短路松弛操作:通过经过其他点来更新最短距离;其实Floyd就是不断通过松弛操作来更新最短距离,经过一个点更新任意两点间的最短距离,经过两个点更新任意两点间的最短距离,经过N个点更新任意两点间的最短距离;1.利用二维数组存图 先初始化数组再赋值for (i = 1; i <= n;i++) for (j = 1; j <=

2015-03-01 21:25:06 3265

原创 Dijstra算法

该算法要求图中不存在负权边;求单源点最短路径:定义一个dis数组来保存源点到其他点的最短距离,并通过松弛操作不断更新dis数组HDOJ2544 最短路 1.初始保存点的图void chushi(){ int i, j; for (i = 1; i <= n;i++) for (j = 1; j <= n; j++) { if (i == j)

2015-02-28 17:05:29 688

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除