摘要: 说实话,其实我还是喜欢用Dijkstra来求单源最短路径。。。但spfa算法有一个好处就是,可以用来处理负边,所以学一下还是有好处的。。况且,形式也很简单,与bfs形式上很相似。。。好吧。。。我还是简单介绍一下spfa算法吧。。。其算法实现过程如下:1、取出队列头顶点,扫描从顶点V出发的每一条边,设每一条边的终点为u,边<V,U>的权值为W,如果有dist[v]+w<dist[u],则修改dist[u]=dist[v]+w,修改path[u]=v;如顶点u不在当前队列中,还要将顶点u入队列;如果dist[v]+w>dist[u],则不做任何处理;2、重复执行以上步骤,直 阅读全文
posted @ 2013-02-01 20:12 ihge2k 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 题目意思很简单,就是让你求两天最短路中共同的公共点的最大个数可以这样理解:我们假设存在2组数据 v0,u0,v1,u1;用path[i][j]代表从点i到点j最短路上最多有多少个点!那么 edge[v0][i]+edge[i][j]+edge[j][u0]=edge[v0][u0]不就表示i到j的最短路为 v0到u0最短路的子路嘛;我们只需更新edge[i][j]中的最大值即可代码如下。。。。View Code 1 #include<iostream> 2 const int N=444; 3 const int inf=10000000; 4 using namespace st 阅读全文
posted @ 2013-02-01 17:48 ihge2k 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意还是比较好理解的,即如果矩阵A、B、C满足A*B=C,则代表矩阵A的第i个城市与代表矩阵B的第j个城市之间存在通路。。。orz。。。然后我就按一般的矩阵相等的条件去判断。。。结果TLE了。。。2000MS+了。。。然后就学了一下矩阵的优化。。。优化后。。。60MS。。orz。。。一开始的代码:View Code 1 #include 2 const int N=100; 3 const int inf=10000000; 4 using namespace std; 5 6 int edge[N][N]; 7 int n,m; 8 struct Matrix{ 9 int ma... 阅读全文
posted @ 2013-02-01 14:30 ihge2k 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 很好的一道题。。。一次水过。。。不过效率不是很高。。都2000MS+了。。。orzView Code 1 #include<iostream> 2 #include<map> 3 #include<string> 4 const int N=220; 5 const int inf=1000000; 6 using namespace std; 7 8 int visited[N]; 9 int edge[N][N];10 int dist[N];11 map<string,int>mp;12 13 void Dijkstra(int v0,in 阅读全文
posted @ 2013-01-31 20:52 ihge2k 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 求无向图的最小环。。。。floyd。。。。具体见代码。。。View Code 1 #include<iostream> 2 const int N=111; 3 const int inf=1000000; 4 #define min(x,y) ((x<y)?(x):(y)); 5 using namespace std; 6 7 int dist[N][N]; 8 int edge[N][N]; 9 int n,m;10 11 void floyd(){12 int ans=inf;13 for(int i=1;i<=n;i++){14 for(int j... 阅读全文
posted @ 2013-01-31 11:20 ihge2k 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 虽然在学数据结构的时候看过并查集。。。好像是在Kruskal算法中讲到了,不过做题中用到这还是头一次。。。哎,acm有太多的第一次了。。。不过生命不休,学习不止。。。好吧。。。不多说了。。。View Code 1 #include<iostream> 2 #include<algorithm> 3 const int N=1010; 4 const int inf=1000000; 5 using namespace std; 6 7 struct Road{ 8 int st,ed,pd; //起点,终点、速度 9 };10 11 int cmp(const Road 阅读全文
posted @ 2013-01-30 15:37 ihge2k 阅读(441) 评论(14) 推荐(1) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548就是Dijkstra算法的应用。。。。不过被坑了好久,原来电梯的up、down是并列的,初始化的时候出错了。。。。调了好半天。。突然醒悟过来了,,,orzView Code 1 #include 2 #include 3 const int N=220; 4 const int inf=1000000; 5 using namespace std; 6 7 int edge[N][N]; 8 int dist[N]; 9 int visited[N];10 int n,A,B;11 12 .. 阅读全文
posted @ 2013-01-30 11:28 ihge2k 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 在做过hdu 1358之后,若菜对floyd也有了更深的理解,学过数据结构的都知道,floyd是用于求每一对顶点之间的最短距离(当然你也可以用dijkstra来求,只不过floyd形式更简单)。。。好吧,先说说我的理解吧,其实floyd本质上还是dp,如果要求顶点vi到顶点vj的距离,那么,我们可以在vi,vj之间引入一个最大点vk,通过vk求出vi到vj的距离的最小值,当然1 2 const int N=100; 3 const int inf=100000000; 4 using namespace std; 5 6 int cost[N]; 7 int edge[N][N]; 8 in. 阅读全文
posted @ 2013-01-30 00:01 ihge2k 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 题目是这样的,貌似一开始我这个英语搓的人还理解错了。。。orzhttp://acm.hdu.edu.cn/showproblem.php?pid=1142就是最短路,只不过用dijkstra是从终点到源点,然后再dfs从源点开始搜。。。好吧,这个记忆化搜索还是挺好用的。。。View Code 1 #include<iostream> 2 #include<cstring> 3 const int N=1010; 4 const int inf=99999999; 5 using namespace std; 6 7 int edge[N][N]; 8 int dist[ 阅读全文
posted @ 2013-01-29 17:07 ihge2k 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 刚刚做过hdu 1455那道搜索题,在来做这道,那就像切菜一样。。。,orz,让我这种若菜也体验了一把切题的乐趣。。。。好吧,还是说一下大意吧。。。这次是为正方形了。。。就是所有的木棒从头到尾相连,判断能否组成一个正方形。。。搜索过程没有像1455那题有那么多的剪枝。。。orz,我是直接暴力的。。。还是上代码吧。。。 1 #include 2 #include 3 using namespace std; 4 5 struct stick{ 6 int length; //长度 7 int mark; //标记是够被使用过 8 }; 9 stick sticks[2... 阅读全文
posted @ 2013-01-28 17:06 ihge2k 阅读(1213) 评论(1) 推荐(0) 编辑