2012年8月13日

二分匹配KM算法

摘要: 【KM算法及其具体过程】 (1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j, W),称为可行边; (2)KM算法的核心思想就是通过修改某些点的标号(但要满足点标始终是可行的),不断增加图中的可行边总数,直到图中存在仅由可行边组成的完全匹配为止,此时这个匹配一定是最佳的(因为由可行点标的的定义,图中的任意一个完全匹配,其边权总和均不大于所有点的标号之和,而仅由可行边组成的完全匹配的边权总和等于所有点的标 阅读全文

posted @ 2012-08-13 21:19 我的ACM之路 阅读(1265) 评论(1) 推荐(0) 编辑

2012年8月12日

HDU 3309 Roll The Cube题解

摘要: Roll The CubeTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 273 Accepted Submission(s): 110 Problem DescriptionThis is a simple game.The goal of the game is to roll two balls to two holes each. 'B' -- ball 'H' -- hole '.' 阅读全文

posted @ 2012-08-12 12:14 我的ACM之路 阅读(433) 评论(0) 推荐(0) 编辑

2012年8月10日

POJ 2263 Heavy Cargo解题代码(SPFA)

摘要: 看了网上很多都用Dijstra或者是Floyd算法解答的,于是自己就用SPFA解试了一下,一下AC过,虽然时间47ms;运用dist[v]=max(dist[v],min(dist[u],edge[u][v]));代码如下: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<queue> 5 using namespace std; 6 #define INF 200000 7 #define MAXN 201 8 9 struct node 10 { 1 阅读全文

posted @ 2012-08-10 21:23 我的ACM之路 阅读(242) 评论(0) 推荐(0) 编辑

POJ_3268_Sliver Cow Party结题报告

摘要: 两次运用SPFA算法求最短路,所用的地图是相互反向的,采用的是邻接表表示 1 #include<iostream> 2 using namespace std; 3 #include<queue> 4 #include<cstdio> 5 #include<cstring> 6 #define INF 20000000 7 #define MAXN 1010 8 struct node 9 { 10 int to; 11 int w; 12 node * next; 13 }; 14 15 node * edge1[... 阅读全文

posted @ 2012-08-10 14:56 我的ACM之路 阅读(182) 评论(0) 推荐(0) 编辑

最短路——SPFA算法模板

摘要: 1 #include<iostream> 2 using namespace std; 3 #include<queue> 4 #define MAXN 10 5 #define INF 100000000 6 struct node 7 { 8 int to; 9 int w; 10 node * next; 11 }; 12 13 node * List[MAXN]; 14 int path[MAXN]; 15 int dist[MAXN]; 16 int vis[MAXN]; 17 int n; 18 19 void SPFA(i... 阅读全文

posted @ 2012-08-10 10:51 我的ACM之路 阅读(279) 评论(0) 推荐(0) 编辑

POJ_3259_Wormholes

摘要: 本题目实际上就是判断是否存在带负权回路,我用的是SPFA算法判断,原理是:如果存在负权值回路,则存在某顶点入队次数count1[v]>N(总的顶点数),所以只需添加一个数组记录顶点入队次数就行了。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #include<queue> 6 #define MAXN 600 7 #define INF 100000000 8 struct node 9 { 10 阅读全文

posted @ 2012-08-10 10:50 我的ACM之路 阅读(146) 评论(0) 推荐(0) 编辑

2012年8月9日

HDU_2112_HDU Today

摘要: HDU TodayTime Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6832 Accepted Submission(s): 1650 Problem Description经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。 这样住了一段时间,徐总对当地的 阅读全文

posted @ 2012-08-09 15:02 我的ACM之路 阅读(152) 评论(0) 推荐(0) 编辑

基于邻接矩阵的Dijstra算法-输出路径

摘要: //基于邻接矩阵的Dijstra算法-输出路径 1 #include<stdio.h> 2 #include<string.h> 3 #include<stack> 4 #include<iostream> 5 using namespace std; 6 7 int n,m; 8 int map[1009][1009]; 9 int path[1009];10 int dis[1009];11 bool used[1009];12 const int maxint=999999999;13 14 void dijk()15 {16 memset 阅读全文

posted @ 2012-08-09 10:07 我的ACM之路 阅读(405) 评论(0) 推荐(0) 编辑

最短路径—基于邻接矩阵的的Dijstra算法模板(不输出路径)

摘要: 1 #include<stdio.h> 2 #define MAX 0x3fffffff 3 int map[105][105],dis[105]; 4 bool use[105]; 5 int n,m; 6 7 void dijk(int start) 8 { 9 int min,rj,i,j;10 for(j=1;j<=n;j++)11 {12 dis[j]=map[1][j];13 use[j]=0;14 }15 use[1]=1;16 for(i=1;i<n;i++)17 {18 ... 阅读全文

posted @ 2012-08-09 10:05 我的ACM之路 阅读(332) 评论(0) 推荐(0) 编辑

最短路

摘要: 主要三种算法:1、FLOYD:个人比较喜欢使用,不但可以快速计算计算多源最短路,也可以判断图的连通性。时间复杂度是(顶点^3)2、DIJK:从点的角度计算单源最短路比较方便吧,可以用邻接表优化(没用过,呵呵)。时间复杂度(顶点^2(朴素),顶点*log(顶点))3、SPFA+静态邻接表+队列储存:是从边的角度计算单源最短路,比较牛逼的算法,因为时间复杂度比较小(边*k),其中K是常数,注意用前两种算法时,因为这两种算法是从顶点思考,所以要小心重边的情况(有时题目没说明但自己要小心),每次读取边取小即可,用SPFA就没关系了网上说K~2,不过实际使用时K估计接近10,因为每个顶点差不多连10条左 阅读全文

posted @ 2012-08-09 10:02 我的ACM之路 阅读(260) 评论(1) 推荐(0) 编辑

导航