摘要:
说实话,其实我还是喜欢用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、重复执行以上步骤,直 阅读全文
摘要:
题目意思很简单,就是让你求两天最短路中共同的公共点的最大个数可以这样理解:我们假设存在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 阅读全文
摘要:
题意还是比较好理解的,即如果矩阵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... 阅读全文