自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 【坐标离散化】 挑战程序设计竞赛

/*数组里边只需要存储有直线的行列以及其前后的行列就够了,这样的话大小最多为 6n*6n就够了10 10 5 w h n1 1 4 9 10 x16 10 4 9 10 x24 8 1 1 6 y14 8 10 5 10 y26*/#include#include#include#includeusing namespace std;int dx[4]={0,0,

2014-05-15 21:27:14 1634 10

原创 【割点】

题目:求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法。分析:1. 最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);2. 通过深搜优先生成树来判定。从任一点出发深度优先遍历得到优先生成树,对于树中任一顶点V而言,其孩子节点

2014-05-13 16:59:26 711 1

原创 【动态规划】

/*回文串,给你一串字符,通过添加删除其中的一部分,使其变成一个回文串,并且花费最小(添加删除都有权值)dp[i][j] 表示 i ~ j 可以构成回文串的最小花费。那么存在: dp[i][j] = Min(dp[i+1][j] + cost[i] , dp[i][j-1] + cost [j] ) (1)如果 str[i] == str[j] 又存在 dp[i][j] = Min

2014-05-13 08:30:04 471

原创 【中缀表达式树】

#include#include#include#include#includeusing namespace std;struct node{ char v; struct node *l,*r; node(char c){ v=c; l=r=NULL; }};stackp; // 操作数栈stackq; // 操

2014-05-12 16:04:16 808

原创 【强连通】

/*题目简述:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的。另外每个奶牛都是欢迎他自己的。求出被所有的奶牛欢迎的奶牛的数目算法证明:1:假设a和b都是最受欢迎的cow,那么,a欢迎b,而且b欢迎a,于是,a和b是属于同一个连通分量内的点,所有,问题的解集构成一个强连通分量。2:如果某个强连通分量内的点a到强连通分量外的点b有通路,因为b和a不是同一个

2014-05-10 16:28:06 589

原创 【最近公共祖先(LCA)】

/*POJ 1330离线算法*/#include#include#includeusing namespace std;const int MAXN =10010;int F[MAXN];//并查集int r[MAXN];//并查集中集合的个数bool vis[MAXN];//访问标记int ancestor[MAXN];//祖先struct Node{ in

2014-05-09 15:32:44 482

原创 【二分搜索】

//用整数来二分#include#include#includeusing namespace std;#define N 10010#define MAX 0x3f3f3f3fint a[N];int main(){ int n,m; double len; while(~scanf("%d%d",&n,&m)){ int Max=0;

2014-05-06 16:52:40 557

原创 二分匹配

/*题意: 一家维修公司,服务的 Q 街区。每个街区有一定距离, 一天公司收到M修理任务,第i个任务发生在第i个街区,并且每个任务都有起始时间 ti,完成一个任务需要di时间.修理工必须完成一个任务后,再去另一个.问要完成这M个任务最少需要多少个修理工?思路:有向图的最小路径覆盖。先用floyd求出两点间的最短距离,然后建图 若第j个街区任务的开始时间大于等于第i个街区的任务完成时间 + 路

2014-05-05 21:11:54 418

原创 【最小路径】

/*POJ 3268题目大意是给出一个有向图的带权邻接矩阵,然后给定目标节点X,求出其余结点出发到结点X再从X回到出发结点的最短路径和中最大的那个...把矩阵转置一下就好了,转置以后就又相当于从X出发了,再来一次Dijkstra搞定...很好理解的..*/#include#includeusing namespace std;const int N=1010;const in

2014-05-03 19:44:36 498

原创 【最小生成树】

/*本题要求求出最大树,刚好克鲁斯卡尔算法按照权值从大到小排序就行了POJ 2377*/#include#includeusing namespace std;int father[2005];int n,m;struct Edge{ int s,e; int cost;}edge[10005];int cmp(Edge x,Edge y){ re

2014-05-03 11:42:04 366

原创 【贪心算法】

/*POJ 3262有n头牛在糟蹋庄稼。把第i头牛牵回家需要ti分钟。第i头牛每分钟会摧毁di的庄稼。每次只能牵一头牛走。问怎么牵使损失最少。思路:考虑a,b两牛。先牵a牛和b牛的损失分别为。2*d[b]*t[a],2*d[a]*t[b]。设先牵a更优。2*d[b]*t[a]<2*d[a]*t[b].所以根据优先级排序然后依次牵就是最优的选择。1 在二个中间选择之中,能根据time/ea

2014-05-02 17:38:30 485

原创 【搜索题目】

/*POJ 1979 模板题目*/#include#include#includeint W,H;char dict[22][22];int sum;bool check(int x,int y){ if(!(x>=1&&x=1&&y<=W)) return false; return true;}void dfs(int x,int y){

2014-05-01 21:28:46 522

原创 【树状数组(一)】

树状数组,又称二进制索引树,英文名Binary Indexed Tree。一、树状数组的用途主要用来求解数列的前缀和,a[0]+a[1]+...+a[n]。由此引申出三类比较常见问题:1、单点更新,区间求值。(HDU1166)2、区间更新,单点求值。(HDU1556)3、求逆序对。(HDU2838) 二、树状数组的表示1、公式表示设A[]为一个已知的数列。C

2014-04-28 16:02:52 406

原创 POJ 1703 && poj 1182【典型并查集】

http://poj.org/problem?id=1703题意 :有两个不同的帮派,每个帮派至少有一个人。 判断两个人是否属于同一个帮派。              有 T 组测试数据。              给你 N 个人,编号从 1 到 N,操作 M 次。              每次操作输入一个字符和两个数 x ,y            

2014-04-28 14:39:15 484

原创 【树状数组(一)】

一维树状数组常用的3个函数

2014-04-27 16:51:56 445

原创 【并查集专题】

http://poj.org/problem?id=1308

2014-04-27 10:01:04 448

原创 【STL 那些事】

1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让

2014-04-27 08:54:17 449

原创 【STL 堆 】

一.heap      在STL中,priority_queue(优先权队列)的底层机制是最大堆,因此有必要先来了解一下heap。heap采用完全二叉树的结构,当然不是真正的binary tree,因为对于完全二叉树,我们通常用一个数组来表示。      以下几个算法都是STL的泛型算法,包含在头文件algorithm里,priority_queue的push(),pop()都有直

2014-04-26 21:24:49 500

原创 【堆与堆排序】

堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节

2014-04-26 19:43:50 483

原创 【哈希表(散列表)】

以散列函数和处理碰撞的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就

2014-04-25 17:48:59 746

原创 【二叉排序树(3)】

代码篇:#include#include#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20typedef int Status;/* 二叉树的二叉链表结点结构定义 */typedef struct BiTNode{ /* 结点结构 */ int data;

2014-04-25 15:11:01 497

原创 【KMP专题】

POJ 3461 http://poj.org/problem?id=3461

2014-04-25 11:41:43 646

原创 【KMP模板】

----------------------------一 模板----------------------------const int maxn=0x7ffffchar s[maxn]; char p[maxn]; int next[maxn]; void getnext(char *p,int *next){ int i=0,j=-1;

2014-04-25 10:22:37 447

原创 【字符 BF 和 KMP算法】

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。在介绍KMP算法之前,先介绍一下BF算法。一.BF算法    BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和

2014-04-25 10:20:31 474

原创 【二叉排序树 (2)】

【进阶篇】二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个依据关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即是对无序序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索、插入、删除的时间复杂度等于树高,期望O(logn),最坏O

2014-04-25 09:35:27 723

原创 【二叉排序树(1)】

二叉排序树又称为二叉查找树,它是一种特殊结构的二叉树,其定义为:二叉树排序树或者是一棵空树,或者是具有如下性质的二叉树:       (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值;       (2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值;       (3)它的左右子树也分别为二叉排序树。这是一个递归定义。由定义可以得出二叉排序树的一个重要性质

2014-04-25 09:22:49 637

空空如也

空空如也

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

TA关注的人

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