Liyuan wanted to rewrite the famous book “Journey to the West” (“Xi You Ji” in Chinese pinyin). In the original book, the Monkey King Sun Wukong was trapped by the Buddha for 500 years, then he was rescued by Tang Monk, and began his journey to the west. Liyuan thought it is too brutal for the monkey, so he changed the story: 

One day, Wukong left his home - Mountain of Flower and Fruit, to the Dragon   King’s party, at the same time, Tang Monk left Baima Temple to the Lingyin Temple to deliver a lecture. They are both busy, so they will choose the shortest path. However, there may be several different shortest paths between two places. Now the Buddha wants them to encounter on the road. To increase the possibility of their meeting, the Buddha wants to arrange the two routes to make their common places as many as possible. Of course, the two routines should still be the shortest paths. 

Unfortunately, the Buddha is not good at algorithm, so he ask you for help.

Input

There are several test cases in the input. The first line of each case contains the number of places N (1 <= N <= 300) and the number of roads M (1 <= M <= N*N), separated by a space. Then M lines follow, each of which contains three integers a b c, indicating there is a road between place a and b, whose length is c. Please note the roads are undirected. The last line contains four integers A B C D, separated by spaces, indicating the start and end points of Wukong, and the start and end points of Tang Monk respectively. 

The input are ended with N=M=0, which should not be processed.

Output

Output one line for each case, indicating the maximum common points of the two shortest paths.

Sample Input

6 6
1 2 1
2 3 1
3 4 1
4 5 1
1 5 2
4 6 3
1 6 2 4
0 0

Sample Output

3

Hint: One possible arrangement is (1-2-3-4-6) for Wukong and (2-3-4) for Tang Monk. The number of common points are 3.

题解:题意题目已给,就是悟空和唐僧分别从s1,s2出发,然后到达t1,t2.求在保证两个人走的都是最短路的前提下,两个人共同经过的地点的数量的最大值;我们可以推出 : 如有几个公共地点,则这些点必定为连续的点;然后,处理一下各个点相互之间的最短距离,若满足dis[s1][i]+dis[i][j]+dis[j][t1]=dis[s1][t1],则i~j即为一段,然后利用DP不断更新,处理处其最大值即可;

AC代码为:

//找分别为s1 t1,s2 t2 最短路径最多相同的地点 

#include<bits/stdc++.h>

using namespace std;

const int INF=0x3f3f3f3f;

int N,M,U,V,W,A,B,C,D;

int dis[310][310],dp[310][310];

void Folyd()

{

    for(int k=1;k<=N;k++)

    {

        for(int i=1;i<=N;i++)

        {

            for(int j=1;j<=N;j++)

            {

                if(i==j||j==k||i==k) continue;

                if(dis[i][j]>dis[i][k]+dis[k][j])

                {

                    dis[i][j]=dis[i][k]+dis[k][j];

                    dp[i][j]=dp[i][k]+dp[k][j]-1;   

                }

                else if(dis[i][j]==dis[i][k]+dis[k][j])

                    dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]-1);     

            }

        }

    }

}

int work(int s1,int t1,int s2,int t2)

{

    int ans=0;

    if(dis[s1][t1]>=INF||dis[s2][t2]>=INF) return 0;

    for(int i=1;i<=N;i++)

    {

        for(int j=1;j<=N;j++)

        {

            if(dis[s1][i]+dis[i][j]+dis[j][t1]==dis[s1][t1]&&dis[s2][i]+dis[i][j]+dis[j][t2]==dis[s2][t2])

            {

                ans=max(ans,dp[i][j]);

            }

        }

    }

    return ans;

}

int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    while(cin>>N>>M)

    {

        if(!N && !M) break;

        for(int i=1;i<=N;i++) 

        {

            for(int j=1;j<=N;j++) 

            {

                dis[i][j]=INF;

                dp[i][j]=2;

            }

            dis[i][i]=0;

            dp[i][i]=1;

        }

        for(int i=1;i<=M;i++)

        {

            cin>>U>>V>>W;

            dis[U][V]=dis[V][U]=min(W,dis[U][V]);

        }

        cin>>A>>B>>C>>D;

        Folyd();

        cout<<work(A,B,C,D)<<endl;

    } 

    return 0;   

}

HDU2833-WuKong(求不同起点,终点最短路的交点最多数量)的更多相关文章

  1. POJ - 3268 Silver Cow Party SPFA+SLF优化 单源起点终点最短路

    Silver Cow Party One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to ...

  2. java实现根据起点终点和日期查询去哪儿网的火车车次和火车站点信息

    本文章为原创文章,转载请注明,欢迎评论和改正. 一,分析 之前所用的直接通过HTML中的元素值来爬取一些网页上的数据,但是一些比较敏感的数据,很多正规网站都是通过json数据存储,这些数据通过HTML ...

  3. 洛谷p2149----两个终点和两个起点,最短路最大交汇长度!!!

    说实话,这题真第一次见,学到了不少有趣的东西,因吹丝汀!! 思路:因为不可能同时并行和相遇(我也不知道为啥,等我会证明了就来说说) 所以正向建边再反向建边,拓扑排序+dp求最下长路,记录下最大的就是解 ...

  4. Bellman-Ford 求含负权最短路

    该算法详解请看   https://www.cnblogs.com/tanky_woo/archive/2011/01/17/1937728.html 单源最短路   当图中存在负权边时 迪杰斯特拉就 ...

  5. python脚本,计算起点终点高程

    import arcpy >>> import arcpy ... gd="D:/项目/shp/Pipe.gdb/ZK/GDPOINT" ... gx=" ...

  6. NX二次开发-创建圆弧(起点-终点-半径)UF_CURVE_create_arc_point_point_radius

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> UF_initialize(); //起点 ]; ArcStartPoint[ ...

  7. 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu Tree and Permutation 找规律+求任意两点的最短路

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  8. 算法基础⑧搜索与图论--dijkstra(迪杰斯特拉)算法求单源汇最短路的最短路径

    单源最短路 所有边权都是正数 朴素Dijkstra算法(稠密图) #include<cstdio> #include<cstring> #include<iostream ...

  9. POJ1523 Tarjan求割点以及删除割点之后强连通分量的数量

    题目链接:http://poj.org/problem?id=1523 SPF:A Single Point of Failure也就是割点(一个点导致网络之间的不连通),由于给出的图是无向图,所以只 ...

随机推荐

  1. 基于@Scheduled注解的Spring定时任务

    1.创建spring-task.xml 在xml文件中加入命名空间 <beans xmlns="http://www.springframework.org/schema/beans& ...

  2. expect 自动填充密码

    它的脚本以#!/usr/bin/expect开头,执行时用expoct,而不是bash.我的一个给samba自动创建用户并且自动填写默认密码的脚本如下: vim smb_passwd.exp #!/u ...

  3. C语言程序设计100例之(17):百灯判亮

    例17   百灯判亮 问题描述 有序号为1.2.3.….99.100的100盏灯从左至右排成一横行,且每盏灯各由一个拉线开关控制着,最初它们全呈关闭状态.有100个小朋友,第1位走过来把凡是序号为1的 ...

  4. C# Json之序列化与反序列化

    前言:在实际开发过程中经常都要和Json打交道,序列化与反序列化就成了开发中必不可缺的技能.本篇博客就教大家如何进行Json序列化与反序列化. 首先要添加引用NuGet包,Newtonsoft.Jso ...

  5. firefox浏览器中使用vux的x-input报错TypeError: _this3.$refs.input.scrollIntoViewIfNeeded is not a function

    最近做公众号项目,想着统一风格,所以决定使用vux. 在调试时发现,只要鼠标点击x-input输入框,就会报错 TypeError: _this3.$refs.input.scrollIntoView ...

  6. head first 设计模式第一章笔记

    设计模式是告诉我们如何组织类和对象以解决某种问题. 学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题. 使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它 ...

  7. PostGIS mysql_fdw安装(Linux)

    ##本人在安装过程中,可能因为系统环境因素或是其他原因,参考网上的文章没有一篇是非常顺利的,所以自己总结一下. ##安装过程中非常坎坷,有些地方反复了好几次,弄的有点模糊,但模糊的地方在文中我会指出. ...

  8. ArcGIS 重新创建几何服务(GeometryService)

    #参考官方网址:http://enterprise.arcgis.com/zh-cn/server/10.4/administer/windows/re-creating-the-geometry-s ...

  9. linux bash编程之函数和循环控制

    函数:实现独立功能的代码段 函数只有在调用时才会执行 语法一: function F_NAME{ 函数体 } 语法二: F_NAME() { 函数体 } 函数的返回值: 默认函数返回值:函数执行状态返 ...

  10. 使用centos7安装PXE教程

    PXE是一种电脑无盘(即没有硬盘)技术. 预启动执行环境(PXE)指的是那些使得IBM兼容计算机(经常是运行Windows系统)不需要硬盘或是启动软盘就能启动的方法. 通俗点讲就是配置好PXE以后可以 ...