摘要: 题意:无向图中有n个结点,m条边。需要求出所有结点之间最短路之和(若是两个结点间不能到达那么算成是x)例:n=2时 ans = d(1,1)+d(1,2)+d(2,1)+d(2,2)。然后从图中随机拿去一条边然后在让你计算所有结点之间最短路之和,问你可能得到的最大值是什么?思路:这道题正解是要求出最短路树,但是给出一种更简单的做法就是spfa暴力。当时抱着试一试的思想写了一发,结果没想到就过了,然后速度在2s左右,还算可以。先算出所有点与点之间的最短路,然后在枚举删除边求最短路最大值就可。代码如下: 1 #include 2 #include 3 #include 4 #include ... 阅读全文
posted @ 2014-01-04 16:08 张小豪 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个无向图中要寻找编号第一个节点到编号第二个节点的路径个数,路径满足所有(a->b)满足存在一条从b出发去东区的路,比所有从a出发去终点的路都短。最后是输出路径数。最多1000个点。思路:原题中不含重边在,在月赛中的测试数据里我加入了重边所以只能用邻接表作为存储结构。仔细分析一下条件我们可以发现只要满足b的最短路比a短a->b的路径就是可以走的。所以我们需要先对2号结点执行Dijkstra算法算出所有结点到终点的距离。然后就是记忆化搜索,dp[i]表示存在多少条从i到终点的路径。接着输出dp[0]就行了。代码如下: 1 #include 2 #include 3 #incl 阅读全文
posted @ 2014-01-04 16:08 张小豪 阅读(354) 评论(0) 推荐(0) 编辑