次短路poj3463】的更多相关文章

poj3463大意:统计最小的长度个数+统计最小的长度+1的个数,大概就是求最短路和次短路的条数更新的时候有5种情况,有个细节就是它得是二维的,一个表示节点编号,一个0/1表示它是次短路的还是最短路的,把结构体扔到队列里.需要更新的就是4种情况.w<最小值w=最小值w<次小值w=次小值 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include&…
这题需要很好的理解Dij. 在Dij的基础上,每个点多一个次短路的长度和数量进行控制. 那么在队列中,最短路控制时出现n次,次短路控制出现n次.注意松弛条件中val值和最短路.次短路的关系. 这题需要了解的是,对vis[i][0]控制确定每个点的最短路长度,对vis[i][1]控制确定每个点的次短路长度. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<queue> usi…
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7252   Accepted: 2581 Description Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the bus moves from…
Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9247   Accepted: 3242 Description Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the bus moves from one city S to another city F. O…
转自:http://www.cnblogs.com/jackge/archive/2013/04/29/3051273.html 算法:最短路和次短路.Dijkstra算法.采用邻接表建图. 总结:不要用邻接矩阵.因为有重边. dis[x][2]:dis[x][0]表示起点到x的最短路.dis[x][1]表示起点到x的次短路: arr[x][2]:arr[x][0]表示起点到x的最短路条数.arr[x][1]表示起点到x的次短路的条数: vis[x][2]对应于x和0.1功能为记录该点是否被访问…
传送门 用dijkstra比较好,spfa可能有的重复 dis[x][2]:dis[x][0]表示起点到x的最短路.dis[x][1]表示起点到x的次短路: tot[x][2]:tot[x][0]表示起点到x的最短路条数.tot[x][1]表示起点到x的次短路的条数: vis[x][2]对应于x和0.1功能为记录该点是否被访问! 那么如何更新最小和次小路呢?显然我们容易想到下面的方法: 1.if(x<最小)更新最小,次小:2.else if(x==最小)更新方法数:3.else if(x<次小…
题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被“同时”限制,否则就容易像我一开始一样写挂... 像拆点一样把最短路和次短路完全分开,放进 dijkstra 的优先队列里,真是巧妙: 还要注意一点是直接更新最短路之后要把它的次短路也加进优先队列里,因为次短路同时也被更新了. 代码如下: #include<iostream> #include&l…
A*算法超内存. 对于最短路,我们可以维护dis[]数组,来求得最短路,但是此题有次短路,所以定义dis[][2],dis[][0]表示最短路,dis[][1]表示次短路;cnt[][2],cnt[][0]表示最短路条数,cnt[][1]表示次短路条数. 更新时: 如果小于最短路,更新dis[][0]. 如果等于最短路,更新cnt[][0]. 如果大于最短路小于次短路,更新dis[][1]; 如果等于次短路,更新cnt[][1]. 由于此时要求2条路,若以外层循环需要2*n-1次. 以下为dij…
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边. 输出格式: 输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的…
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE,所以要利用平面图的一些性质. 这里讲一下平面图的对偶图性质. 在平面图中,所有边将图分成了n个平面.我们将平面标号,对于原图中的每条边,在与之相邻的两个平面间连一条边,最后得到的图就是原图的对偶图. 对偶图有如下性质: 1.对偶图的边数与原图相等. 2.对偶图中的每个环对应原图中的割. 于是可以在原图中的…