自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Free Loop~~~跳动的音符

开荒~刷题~重新起航~追寻梦想~永不放弃~~~

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

原创 HDU1754 线段树 (完全二叉树)

#include#include#includeconst int maxn=200000+10;struct node{ int s; int l,r;};struct node tree[maxn*10];int a[maxn];int max(int x,int y){ return x>y?x:y;}int create_tree(int h,int x,int

2015-08-06 11:36:08 869

原创 POJ2777 线段树(结构体指针)

#include #include struct node{ int c,s,t; struct node *l,*r; node(){ c=1; l=NULL;r=NULL; }

2015-08-05 23:25:51 890

原创 HDU1075 字典树

#include#include#includestruct node{ int count; char word[30]; struct node *next[30]; node(){ count=0; memset(next,0,sizeof(next)); }};struct node *h,*p,*q;char w1[30],w2[30],s[3010];v

2015-08-04 11:57:48 739 1

原创 POJ2001 字典树

写法一:#include #include#includestruct node{ int count; struct node *next[26]; };struct node *root,*p,*q;char s[1010][25];int main(){ int i,j,k,m,n=0; root=new node; root->count=0; for(i=0

2015-08-04 01:16:05 528

原创 贪心之最大子矩阵和

O(N^3)#include#includeconst int maxn=101;int a[maxn][maxn],s[maxn][maxn];int main(){ int i,j,k,m,n,u,v; int x,y; scanf("%d",&n); for(i=1;i<=n*n;i++){ scanf("%d",&k); x=(i-1)/n+1; y=i%

2015-08-03 17:44:04 1111

原创 LCA之TARJAN算法

#include#includeconst int maxn=1000;int e,to[maxn],next[maxn],begin[maxn];int e1,to1[maxn*10],next1[maxn*10],begin1[maxn];int p[maxn],fa[maxn],t[maxn];int find(int x){ if(fa[x]!=x) fa[x]=fin

2015-03-31 20:57:52 534

原创 POJ2031 最小生成树

#include#include#includeconst int maxn=110;const float inf=1000000000.0;int p[maxn];float a[maxn][maxn],d[maxn],x[maxn],y[maxn],z[maxn],r[maxn];int main(){ int i,j,k,m,n; float ans; while(1

2015-03-31 20:56:30 506

原创 POJ2349最小生成树

#include#include#includeconst int maxn=510;const double inf=1000000000.0;double a[maxn][maxn],d[maxn],e[maxn];int x[maxn],y[maxn],p[maxn];int main(){ int i,j,k,m,n,T,v=-1,u; double tmp,min;

2015-03-31 20:56:25 648

原创 最小生成树之KRUSKAL

此程序之快速排序有点问题,请自行修改正确#include#includeint e[1001][3],p[101],rank[101];int m,n;void qsort(int x,int y){ int mid,l,r,k; l=x;r=y; mid=e[(x+y)/2][0]; while(l<=r){ while(e[l][0]<mid && l<=r)l++;

2015-03-31 20:54:28 376

原创 最小生成树之PRIM算法

#include#includeconst int maxn=110,inf=1000000000;int a[maxn][maxn],d[maxn],p[maxn];int main(){ int i,j,k,m,n,ans;while(scanf("%d",&n)!=EOF){ ans=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a

2015-03-31 20:53:46 560

原创 USACO 草地排水 网络流

#include#include#include#include#include#include#include#includeconst int maxn=200+10,inf=1000000000;using namespace std;bool p[maxn],flag=true;int c[maxn][maxn],f[maxn][maxn],pre[maxn],q[m

2015-03-31 20:52:05 1163

原创 线段树计算线段填色

#include#includestruct node{ int s,t,c; struct node *l,*r;};struct node *h;int m,n;int c_sum[100010];void create_tree(struct node *x){ int mid; struct node *p,*q; if(x->t-x->s<=1)return;

2015-02-06 11:45:42 602

原创 静态数组实现TREAP

#include#includestruct node{ int x,w,h,r,l;};struct node a[10001];int e;void rotate_left(int v,int u){ int t=a[u].h; a[u].r=a[v].l;a[a[v].l].h=u; a[u].h=v;a[v].l=u; a[v].h=t; if(a[t].l==u

2015-02-06 11:44:51 906

原创 BST && TREAP 实现简单排序

//BST#include#includestruct node{ int x; struct node *left,*right;};struct node *h,*p,*q;void insert(int s,struct node *t){ if(s>t->x){ if(t->right==NULL){ q=new node; q->

2015-02-05 12:08:22 610

原创 结构体指针实现插入排序和解决约瑟夫环问题

//用指针实现插入排序#include#includestruct node{    int data;    struct node *next;};int main(){    int i,j,k,m,n,x;    struct node *h,*p,*q;    scanf("%d",&n);        scanf("%d",&x

2015-02-04 11:35:26 1140

原创 各种排序方法

//堆排序#include#includeint a[100010],len=0;void insert(int x){ a[++len]=x; int k=len,t; while(k>1 && a[k]<a[k/2]){ t=a[k];a[k]=a[k/2];a[k/2]=t; k=k/2; }}int main(){ int i,j,k,m,n,t; sca

2015-02-03 12:01:27 965 4

原创 高精度加法减法乘法除法

//高精度加法#include#include#includeint a[1000],b[1000],c[1000];char s[1000];int main(){ int i,j,k,m,n; int alen,blen,clen; gets(s); alen=strlen(s); for(i=alen-1;i>=0;i--) a[alen-i]=s[i]-'0'

2015-02-03 12:00:33 3103

原创 POJ2386 Lake Counting 图的遍历

题目大意:有一个N*M的矩阵,W表示陆地,连接方向为8个方向,问总共有多少个岛屿题解,直接用BFS遍历图即可统计出#include#include#include#includeconst int maxn=110;char s[maxn];int a[maxn][maxn],q[maxn*maxn][2],m,n;int d[8][2]={{0,1},{1,0},{-1,0

2014-12-20 22:41:47 658

转载 OI知识体系

2014-12-20 16:35:55 820

原创 POJ 3259 Wormholes 链式前向星+SPFA练习

题目大意:给出一个无向图,再给出W个虫洞,虫洞的意思就是权值为负的边,问你可否找到负权环题解:SPFA中,如果每个点进队列超过N次,就可以判断有负全环。#include#include#include#includeconst int maxn=510,inf=1000000000;int e,to[maxn*12],next[maxn*12],begin[maxn],w[max

2014-12-14 15:27:23 707

原创 POJ 1511 Invitation Cards 链式前向星+SPFA练习

题目大意:给出一个有向图,点和边都不超过1000000,求1号点到所有点的距离和+所有点到1号点的距离和。题解:1号点到其他点的距离和直接用SPFA求,再将所有边反向,求出1号点到所有点的距离和,就是所有点到1号点的距离和,因为点非常多,所有采用链式前向星存储。#include#include#include#includeconst int maxn=510,inf=100000

2014-12-14 15:16:25 786

原创 POJ2253 Frogger -DIJKSTRA || FLOYD最短路练习

题目大意:池塘里有N片荷叶,给出每片荷叶的坐标,青蛙要从X号荷叶跳到Y号荷叶,问单步最少要跳多少才能到达。题解:这道题可以采取类FLOYD的方法,要从X跳到Y,当越来越多的荷叶做为中间点来跳的时候,显然有可能单步跳的距离更短。程序如下:#include#include#includeconst int maxn=210;struct point{int x,y;}p[maxn];

2014-12-10 17:02:53 903

原创 POJ2502 Subway -DIJKSTRA最短路练习

题目大意:有个小朋友要从家里到学校,可以通过走路或者乘地铁的方式到达,走路每小时10KM,乘地铁每小时40KM,他可以走路+换乘地铁等多种方式到达,给出家,地铁站和学校的坐标,请问他到达学校的最短时间是多少分钟(四舍五入),假设没有等待地铁时间。题解:本题是一道要转换模型的最短路题,要将距离转化成时间,将家,每个地铁站,学校转换成点,最后求家到学校的最短时间,需要注意的是,地铁线不是直的,譬如

2014-12-10 16:18:45 769

原创 POJ1125 Stockbroker Grapevine -FLOYD练习题

题目大意是:有N个人,相互之间可以传递信息,但是A传给B与B传给A的时间是不一样的,一个人同时可以向多个人传递信息,时间不一样,问你把消息传给谁?可以在最短时间让消息传递给所有人。典型的FLOYD求最短路,最后找到所有人距离最大之最小那一个人,输出答案。#include#include#includeconst int maxn=110,maxint=1000000000;int

2014-12-09 00:44:20 754

原创 POJ2387 Til the Cows Come Home -DIJKSTRA 练习

题目大意是:有N个牛棚和T条边相连,每条边有个权值,问1号到N号牛棚之间的最短距离本题是又是DIJKSTRA最短路水题,注意任何两个牛棚之间可能有多条路相连,输入时先输入边,再输入点,程序如下:#include#include#includeconst int maxn=1010,maxint=1000000000;int a[maxn][maxn],d[maxn],p[maxn]

2014-12-09 00:13:14 695

原创 POJ1502 MPI Maelstrom -DIJKSTRA练习系列

本题的大意是有N个处理器,任何两个处理器之间的传输信息是需要时间的,有的处理器之间不能传输信息,给出一个处理器传输信息时间的二维矩阵的下三角,X表示不能传输,问从第一个处理器传输到所有处理器所需要的总时间。本地是典型的DIJKSTRA水题,注意输入时需要用字符串输入,程序如下:#include#include#includeconst int maxn=110,maxint=100000

2014-12-08 23:59:42 788

原创 信息学竞赛刷题建议历程

1、近10年NOIP普及组前三题——30道题练入门2、USACO全体——练基础算法3、近10年NOIP提高组全部试题——感受OI基础3.1、刘汝佳白书训练指南所有例题——打好基础4、开始SGU版切刷题——不管苦难与否直接扫荡过,这个过程一直伴随你到全国赛,最好题量破300~~5、HNOI近10年试题——感受省队难度6、WC,NOI近10年试题——感受国内金牌怎么修炼成的

2014-12-03 00:38:32 4679 3

原创 NOIP2014DAY2T2

#include#includeconst int maxn=10010,maxm=200010;int e,to[maxm],next[maxm],begin[maxn];int e1,to1[maxm],next1[maxm],begin1[maxn];int p[maxn],pd[maxn],px[maxn];int q[maxn],d[maxn];void add(int x

2014-12-02 21:21:27 716

原创 好用的链式前向星

对于已经的一个图,我们存储它的方式有很多种,其中常用的有1、邻接矩阵(建图简单,使用简单,但是遍历图时间复杂度太大)2、邻接表(建图较复杂,对于特殊的米字图时间复杂度太大)3、优化的邻接表,在我前面一片文章里有介绍,就是为每一个节点保存一个LAST数组(最后的点编号),可以极大提高建图速度http://blog.csdn.net/cnyali/article/details/416

2014-12-01 11:18:47 2079 2

原创 NOIP2014day1T2联合权值新版题解(优化的邻接表)

之前的解题报告无法过全部数据,因邻接表没有优化,统计权值方式也太暴力,做以下修改1、建邻接表时加一个数组来记录每个节点的尾指针位置2、统计每个点周围所有点权值最大的两个点3、利用x1*y1+x1*y2+x1*y3....=x1*(y1+y2+y3+...)进行简单优化加速程序如下,完爆官方所有数据:#include#includeconst int maxn=200010,

2014-12-01 00:46:28 2377

原创 NOIP2014提高组DAY1题解

1.生活大爆炸版石头剪刀布【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙

2014-11-11 22:22:53 1361

原创 noip2014普及组题解

1. 珠心算测验【问题描述】珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测

2014-11-11 01:45:33 5823 1

原创 Ubuntu14下配置GEDIT编辑C++,JAVA开发

1、确认在UBUNTU里已经配置好g++,java开发环境2、打开gedit,

2014-11-07 11:45:53 1555

原创 扩展欧几里得算法解同余方程(NOIP2012)

同余方程 (mod.cpp/c/pas)  【问题描述】 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。  【输入】 输入文件为 mod.in。 输入只有一行,包

2014-11-04 23:37:45 703

原创 欧几里得算法及扩展欧几里得算法

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。证明:         a可以表示成a = kb + r,则r = a mod b  假设d是a,b的一个公约数,则有  d|a, d|b,而r = a - kb,因此d|r  

2014-11-04 18:42:12 542

原创 网络流最大流算法参考程序

#include#includeint c[101][101],f[101][101],p[101],m,n,d[10000],pre[101];int main(){    int i,j,k,top,last;    scanf("%d%d",&n,&m);    int x,y,z;    for(i=1;i        scanf("%d%d%d",&x,

2014-09-14 11:40:53 832 1

原创 匈牙利参考程序

#include#includeint a[101][101],d[101],m,n,p[101];int dfs(int x){ int i,j,k; for(i=1;i<=n;i++) if(a[x][i] && !p[i]){ p[i]=1; if(!d[i] || dfs(d[i])){

2014-09-14 11:16:27 721

转载 nlogn 最长不下降子序列

O(nlogn)的算法关键是它建立了一个数组temp[],temp[i]表示长度为i的不下降序列中结尾元素的最小值,用top表示数组目前的长度,算法完成后top的值即为最长不下降子序列的长度。设当前的以求出的长度为top,则判断num[i]和temp[top]:1.如果num[i]>=temp[top],即num[i]大于长度为top的序列中的最后一个元素,这样就可以使序列的长度增加1,即

2014-09-14 11:15:59 536

原创 石子合并—链式

问题描述设有N堆沙子排成一排,其编号为1,2,3,…,N(N【输入格式】    输入由若干行组成,第一行有一个整数,n(1≤n≤100);表示沙子堆数。第二行是一个整数m是每堆沙子的数量。 【输出格式】    一个整数,归并的最小代价。【输入样例】713 7 8 16 21 4 18【输出样例】239

2014-08-28 08:14:37 669

原创 归纳策略——求前n个自然数的平方之和

求前n个自然数的平方之和:         S=12+22+32+……+n2

2014-08-23 15:52:08 1212 1

空空如也

空空如也

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

TA关注的人

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