链接:http://acm.hdu.edu.cn/showproblem.php?pid=2833
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 305;
const int inf = 1e8 + 5;
int n,m,u1,v1,u2,v2;
int maps[maxn][maxn];
int cnt[maxn][maxn];
void init(){
for(int i=0;i<maxn;i++){
for(int j=0;j<maxn;j++){
maps[i][j] = (i == j) ? 0 : inf;
cnt[i][j] = (i == j) ? 1 : inf;
}
}
}
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i == k || j == k || maps[i][k] == inf || maps[k][j] == inf) continue;
if(maps[i][j] > maps[i][k] + maps[k][j]){
maps[i][j] = maps[i][k] + maps[k][j];
cnt[i][j] = cnt[i][k] + cnt[k][j] - 1;
}
//else if(maps[i][j] == maps[i][k] + maps[k][j]){
// cnt[i][j] = max(cnt[i][j],cnt[i][k] + cnt[k][j] - 1);
// }
}
}
}
}
void solve(){
int ans = 0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//cout<<cnt[i][j]<<endl;
if( maps[u1][i] + maps[i][j] + maps[j][v1] == maps[u1][v1] &&
maps[u2][i] + maps[i][j] + maps[j][v2] == maps[u2][v2])
ans = max(ans,cnt[i][j]);
}
}
printf("%d\n",ans);
}
int main(){
while(~scanf("%d%d",&n,&m)){
if(n + m == 0)break;
init();
int u,v,w;
while(m--){
scanf("%d%d%d",&u,&v,&w);
maps[u][v] = maps[v][u] = min(maps[u][v],w);
//maps[u][v] = maps[v][u] =w;
cnt[u][v] = cnt[v][u] = 2;
}
scanf("%d%d%d%d",&u1,&v1,&u2,&v2);
floyd();
solve();
}
return 0;
}