自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (3)
  • 收藏
  • 关注

原创 poj2060Taxi Cab Scheme_最小覆盖路径问题

题目链接题意:   租车公司有n个预约, 每个预约有时间和地点, 地点分布在二维整数坐标系上, 地点之间的行驶时间为两点间的曼哈顿距离(|x1 - x2| + |y1 - y2|)。一辆车可以在运完一个乘客后运另一个乘客, 条件是此车要在预约开始前一分钟之前到达出发地, 问最少需要几辆车搞定所有预约。给出一些预约的起始时间,出发地和目的地,问至少需要多少车可以满足所有的预约

2017-04-29 17:47:48 494

原创 割点_去掉割点后的连通分支数(点连通图)

tarjan算法找到割点后,计算出去掉这个点后的图的连通分支数主要是解释在去掉点后的连通分支数的初始值疑问参考题:poj1523点击打开链接

2017-04-28 10:43:41 1930

原创 模板_poj1523SPF_割点以及点连通分支

poj1523题目链接题意:        图中是否有割点,去掉某个割点后有几个连通分量。block[i]是去掉割点i后的连通分支个数。割点:去掉这个点后,连通分支数比没去点这个点的连通分支数多1#include#include#includeusing namespace std;#define min(a,b) a<b?a:b #define max(a,b)

2017-04-28 10:12:38 577

原创 强连通分量_双连通分量(转载)

基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合,删

2017-04-27 13:02:01 731

原创 poj3352Road Construction_双连通分量(边)(tarjan算法之一)

poj3352题目链接题意:给出n个顶点,m条边,求至少添加几条边使这个图为双连通图。双连通图分为点连通和边连通图,其中他们之间还有着密切关系(具体可以根据自己需要深入了解)首先根据题意要求和求边连通的方法简单,我们选择用边连通的方法解决问题。将已经连通的图进行缩点,使之变成一棵树,那么最少添加的边个个数就是这棵树的(叶子节点数+1)/2;其实我们是根据每个节点的low

2017-04-27 11:16:49 558

原创 poj1364King_差分约束系统

题目链接题意:现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}现在给出一个不等式,使得ai+a(i+1)+a(i+2)+...+a(i+n)ki首先给出两个数分别代表S序列有多少个,有多少个不等式不等式可以这样描述给出四个参数第一个数i可以代表序列的第几项,然后给出n,这样前面两个数就可以描述为ai+a(i+1)+...a(i+n),即从i到

2017-04-26 14:56:34 310 1

原创 对差分约束的理解

【1】最短路如何建图?差分约束系统是{di-dj考虑将di-dj=di,∴结点i要满足所有的结点j的dj+u>=di,那么必须至少取到min(dj+u),如果取得更大,就会矛盾。于是这样就可以建最短路,求出一组取值。【2】这组取值有什么意义?它通过最短路得到。刚好满足了所有条件,约束得最紧密。也就是说,它不唯一,任意的di可能可以更小,相对差就会变大。

2017-04-24 21:28:22 360

原创 模板_poj1201Intervals_差分约束系统解决(类区间问题)

poj1201题目链接题意:第一行输入n,下面输入n个限制条件,条件的格式为 ai bi ci,  0差分约数系统的含义,其实就是如果有n个变量在m个形如aj-ai>=bk(类似于求最长路径)条件下,求解的此不等式的方法。 而这种不等式的解法其实就是转化为图论的最小路的算法求解的。我们将上面的不等式边形后得到aj>=ai+bk正好就可以看做是从ai到aj权值是bk的一条

2017-04-24 21:01:15 713

原创 poj3159Candies_差分约束系统解决_转换(spfa算法)

真是迷之题啊,第一次用vector超时,不知道是怎么回事!了解数组实现邻接表题目链接题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是B不能比A多超过C个,即B- A<= c 。最后求第n个同学 比 第1个同学最多多几个糖果。算了先说下学习的这个新算法吧;差分约束。 总共n个点,m对 A B c  表示B-A要求1和n的差值

2017-04-24 19:33:44 406

原创 模板_数组实现邻接表

平时处理图边的问题我喜欢用vector实现,今天做了一道题发现用vector 会超时。。。。本来认为这两种方法一样的效率,甚至vector不仅方便还快,看来害死有区别的。贴一下模板(平时没有用过链接表处理的同学看下下面,我贴上了讲解。)memset(head,-1,sizeof(head));void add(int u,int v,double w){ edge[nu

2017-04-24 19:03:15 492

原创 poj1236Network of Schools_强连通分量缩点(tarjan算法解决)

poj1236题目链接题目大意:有N个学校,从每个学校都能从一个单向网络到另外一个学校,两个问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2:至少需要添加几条边,使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。(就是最少加入几条边,让这个图变成强连通图)解题思路:首先找连通分量,然后看连通分量的入度为0点的总数,出

2017-04-24 14:43:35 387

原创 强连通图_割点_割边(桥)_双向连通分量关系

双连通分量:分为点双连通和边双连通。它的标准定义为:点连通度大于1的图称为点双连通图,边连通度大于1的图称为边双连通图。通俗地讲,满足任意两点之间,能通过两条或两条以上没有任何重复边的路到达的图称为双连通图。无向图G的极大双连通子图称为双连通分量。Tarjan算法的应用论述:1.求强连通分量、割点、桥、缩点:对于Tarjan算法中,我们得到了dfn和low两个数组,

2017-04-23 21:19:47 745

原创 模板_tarjan强连通缩点算法

#define min(a,b) a<b?a:bvectore[5005];stackS;int dfn[1005];int low[1005];int time,Bcnt;int Belong[1005];int in_stack[1005];int size_stack[1005];void tarjan(int u){ int i,v; S.push(u); in

2017-04-23 17:36:13 874

原创 poj2186Popular Cows_ 强连通分支_缩点tarjan算法

题目链接   题意:   每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。       先用tarjan求出每个强连通分量,再缩点,统计每个点的出度,如果有

2017-04-23 17:26:23 299

原创 模板_SPFA算法

SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。算法步骤:该算法需要使用到队列,这里我们用STL的queue比如求s点到所有点的最短路径。

2017-04-22 19:37:05 293

原创 poj1459Power Network_最大流的增广路算法_多源点多汇点问题(Edmord_Karp)

题目链接题目大意:现在有一个发电站,需要给用户送电。解释一下输入数据:总结点数 nodenum  电站数power   用户数consumer  电缆线数link然后link行,起点-终点 发电量然后power行,每个电站的产电量然后consumer行,每个用户的用电量解题思路:这道题是最大流的入门题,只是变成了多源多

2017-04-22 11:06:55 663

原创 模板_poj1273Drainage Ditches_最大流问题_残留网络流增广解决(Ford-Fulkerson方法)

题目链接                                 最大流定理  如果残留网络上找不到增广路径,则当前流为最大流;反之,如果当前流不为最大流,则一定有增广路径。这里涉及到了一个残留网络.如果已经理解了什么是最大流,算法说起来就比较好理解了,在每次找到一条增广路之后,就去更新它的流量(正反向都要更新),每次更新后再继续

2017-04-21 16:29:02 465

原创 HDU1853Cyclic Tour_最小权最大匹配_KM负值解决

题目链接和最大权最大匹配一样,只是在存值的时候存的是负值,在判断if(-c>price[a][b])price[a][b]=-c;这一块还能保证重边的问题;也都是用的KM算法#include#include#define max(a,b) a>b?a:b#define INF 1<<31-1int price[105][105];int lx[105],ly[105];boo

2017-04-20 19:23:28 348

原创 模板_图的割点

什么时候用到图的割点呢?(当删除一个顶点后,图的连通量个数发生变化。)例如两国打仗,让你找到一个攻击点攻击后致使敌方的原连通的地方不再连同)如同所示:/*6 71 41 34 23 22 52 65 62 */#include#include#define min(a,b) a<b?a:busing namespace std;int n,m,root;i

2017-04-20 15:25:21 336 2

原创 最大匹配_完美匹配——概念

交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边...形成的路径叫交替路。增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路(agumenting path)。

2017-04-20 15:17:37 36559 1

原创 模板_HDU2255奔小康赚大钱_最大权最大匹配问题_KM算法

题目链接:奔小康赚大钱KM算法类似于匈牙利算法,只是多了些东西(最大权值的交换,记录)KM算法详解链接不过这道题就已经是KM算法的入门题了相比之下多了两个数组x_price[],y_price[]x_price[]是记录其最大权忘了一个重点:在进入匹配的时候每次都要对x_vis[],y_vis[]清空(memset一下)在匈利牙算法中记得要把v2_vis[]清空一下。

2017-04-20 15:04:48 369 1

原创 poj1258_最小生成树

poj1258题目链接#include#include#define inf 0x3f3f3fint map[105][105];int dis[105];bool vis[105];int main(){ int i,j,n,sum,count; while(~scanf("%d",&n)) { memset(dis,0x3f,sizeof(dis)); mem

2017-04-20 11:19:14 312

原创 poj2485_最小生成树

poj2485题目链接#include #include#define N 505int map[N][N];int dis[N],book[N];int main(){ int t; scanf("%d",&t); while(t--) { memset(book,0,sizeof(book)); int n,i,j,k; int count=0; sca

2017-04-20 11:17:31 212

原创 poj1789_最小生成树

poj1789最小生成树#include#includeusing namespace std;struct node{ int u,v,w; }edge[2000505];int p[2005];int cmp(node a,node b){ return a.w<b.w;}int find(int x){ return p[x]==x?x:p[x]=fi

2017-04-20 11:15:03 276

原创 模板_素数打表

#includebool nosu[2000000];int main(){ int i,n,j; for(i=2;i<=1414;++i) if(!nosu[i]) for(j=i*i;j<=2000000;j+=i) nosu[j]=1; while(scanf("%d",&n)&&n) { for(i=

2017-04-20 11:11:59 1081

原创 模板_prim最小生成树算法

//prim算法 for(i=1;i<=n;i++) dis[i]=e[1][i]; book[1]=1; count++; while(count<n) { min=inf; for(i=1;i<=n;i++) {

2017-04-20 11:04:18 338

原创 模板_krustra最小生成树算法

int cmp(node a,node b){ return a.w<b.w;} int find(int x) { return f[x]==x?x:f[x]=find(f[x]); } int join(int u,int v) { int x=find(u); int y=find(v); if(x!=y)

2017-04-20 11:01:17 435

原创 模板_一种排序

int cmp(Node a,Node b)//sort排序函数 {if(a.num!=b.num)return a.numy。意思是降序 else if(a.len!=b.len)return a.len<b.len;//按照题意是按照升序的顺序排列 else if(a.wide!=b.wide)return a.wide<b.wide;}

2017-04-20 10:51:26 214

原创 关于建图

之前一直狭隘的以为建图就是把题目中给的数据(例如矩阵,边权值等)或者是字符串的形式转换成边关系,今天才发现这才是最低级的(然而我连这转化也做的不怎么样,至少不是每次很轻松的完成)。  我现在所理解的建图不仅仅是将题目中给的数据进行简单的替换了,而是为了解决问题,根据问题类型将其转换成某种图类型,比如是有向图,无向图,二分图(因为我现在依然只学到了这点,等以后做了别的题再补充)。。。,利用不同图

2017-04-20 10:43:13 463

原创 poj3020_最小覆盖路径(顶点个数-二分图最大匹配数)

poj3020 题目链接建议做这题前先做下poj3041题目链接3041那题是最小点覆盖3020是最小路径覆盖题意:       *--代表城市,o--代表空地       给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市最少要用多少无线。公式:,最小路径覆盖=总节点数-最大匹配数;但是由于在建图的时候建的是无向图,所以最大匹配数=求得的最大匹配数/

2017-04-20 10:22:56 1776

原创 poj1094_Sorting It All Out_拓扑排序

poj1094题目链接有三种情况:              1.有序              2.无序              3.有环拓扑排序可以判断是否有环或有序,除此以外就是无序了。并且1,3情况下只要判断后之后的输入就无影响,2必须要把所有顶点遍历完后才能确定。建议在把排序时候把每次入度为0的顶点输出调试一下,更有助与理解。#include#incl

2017-04-19 21:29:02 224

原创 模板_matlab 匈牙利算法(最大匹配数/最小覆盖点)

bool dfs(int x){ for(int y = 1;y <= v2;y ++) { if(map[x][y] && !v2_vis[y]) { v2_vis[y]=1; if(v2_link[y]==0 || dfs(v2_link[y])) { v2_link[y]=x; return true; } } } return

2017-04-19 21:10:41 1680

原创 模板_拓扑排列

int TopSort(){ queueQ; size=0; for(i=0;i<n;i++) { if(indegree[i]==0) Q.push(i); } while(!Q.empty()) { int u=Q.front(); Q.pop(); size++; for(i=0;i<n;i++) { if(map[u][i])

2017-04-19 21:02:28 260

原创 模板_Dijkstra最短路径算法

//初始化dis数组,这里是1号顶点到其余各个顶点的初始路程 for(i = 1;i <= n;i ++) dis[i]=e[1][i]; book[1]=1;//Dijkstra算法核心语句 for(i = 1;i <= n-1;i ++) { min = inf; for(j = 1;j <= n;j ++) { if(!book[

2017-04-19 20:51:46 252

原创 模板_Bellman-frod算法(最短路径解决负权路问题)

//Bellman-ford算法核心语句dis[]都是记录源点到各个顶点的最小距离 for(k = 1;k <= n-1;k ++) for(i = 1;i <= m;i ++) if(dis[v[i]] > dis[u[i]] + w[i]) dis[v[i]] = dis[u[i]] + w[i]; //初始化dis数组,(1号顶点到

2017-04-19 20:31:28 492

原创 poj3041_匈牙利算法_二分图最小覆盖点(最大匹配数)

题目链接这里是不是应该写下什么是匈牙利算法(找到了一个非常容易理解的一个讲解趣味算法),这位大佬已经讲的很详细了~~~题意:在一个n*n的网格中,有k个炸弹吧,每次可以删除一行或者一列,要清除这所有炸弹最少要删除几次。思路(copy:参考链接):将每行、每列分别看作一个点,对于case的每一个行星坐标(x,y),将第x行和第y列连接起来,例如对于输入:(1,

2017-04-19 20:07:39 428

原创 poj3026Borg Maze_最小生成树(广搜+prim算法)

题目链接!题很简单,就是求最小生成树的,难点就在于将图转化成边(带权值),就是这一块不好转化。我想到了用广搜去找每个顶点到其他顶点的距离,但是在代码实现上有些困难,参考了别人的代码后就恍然大悟了,觉得在prim算法上会很简单,但是同样也遇到了问题,就是在dis[]初始值时候,不知道初始谁了。总认为要先将S(开始搜索的地方)加入第一个dis值中,这样的一个错误的想法就卡住了。看来还是

2017-04-18 09:22:32 355

原创 poj1573_搜索(广搜和深搜)

点击打开题目链接其实深搜和广搜都一样,没有太大的差别,因为每次都是只走了一个深搜:#include#includeint book[100][100];char map[100][100];int s;int n,m,count,flag;void dfs(int c,int r){ if(book[c][r]) { flag=1;

2017-04-17 13:50:51 404

原创 二分图最大匹配

代码实现是通过(连锁反应)实现的,也叫增广路,每次发现一次增广路配对数就加1.增广路本质就是一条路径的起点和终点都是未被配对的点。如果)前匹配方案下再也找不到增广路,(继续对剩下没有被匹配的点一一进行配对,直到所有的点都尝试完毕,找不到新的增广路为止/*input: 6 51 41 52 52 63 4output: 3*/#includeint e[101][1

2017-04-15 17:03:00 471

原创 图的割边_桥_关键道路:

如何求割边(桥):在一个无向连通图中,如果删除某条边后,图不在连通。求割边和求割点算法都一样,只改变了一个符号low[v]>=num[u];把=号去掉。为什么呢?因为求割点的时候是指点v是不可能不经过父节点u为回到祖先节点(包括父节点),所以顶点u是割点。如果low[v]==num[u]表示还可以回到父节点,如果顶点v不能回到祖先也没有另外一条回到父亲的路,那么u-v这条边就是割边

2017-04-14 10:05:29 462

宠物狗_简单用户交互改进版

是个个人宠物网页,与用户有较好用户交互性,挺有意思的,有利于学习JavaScript

2017-07-20

数据存储_网上订单预定小案例

结合博客学习js的小案例

2017-07-20

简单用户交互界面

源码解释在博客。js实现用户交互

2017-07-18

空空如也

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

TA关注的人

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