比赛 近期练习题回顾 评测结果 AAAAAAAATT
题目名称 孙悟空 最终得分 80
用户昵称 liuyu 运行时间 2.148 s
代码语言 C++ 内存使用 16.64 MiB
提交时间 2018-10-26 19:47:10
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long

using namespace std;
inline void in(int &x){
	x=0;char c=getchar();
	while(!isdigit(c))c=getchar();
	while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();
}
const int INF=1e9+7;
const int N=500+10;
int n,m,x,y,z,A,B,C,D;
int dis[N][N],d[N][N],f[N][N];
bool vis[N];
int ans=1;
queue<int>q;
int inq[N];
struct edg{
	int x,w;
	bool operator < (const edg&e)const{return w<e.w;}
};
//priority_queue<edg>q;
int main(){
	freopen("sunwukong.in","r",stdin);
	freopen("sunwukong.out","w",stdout);
	ios::sync_with_stdio(false);
	in(n);in(m);
	//cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)if(i!=j)
			d[i][j]=INF;//,f[i][j]=1;
			else f[i][i]=1;
	for(int i=1;i<=m;i++){
		in(x),in(y),in(z);//cin>>x>>y>>z; 
		d[x][y]=min(d[x][y],z);
		d[y][x]=min(d[y][x],z);
	}
	in(A),in(B),in(C),in(D);
	//cin>>A>>B>>C>>D;
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)if(i!=k)
			for(int j=1;j<=n;j++)if(i!=j&&j!=k&&d[i][k]<INF&&d[k][j]<INF){
				d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
			}
	for(int i=1;i<=n;i++){
		memset(inq,0,sizeof(inq));
		
		inq[i]=1;q.push(i);
		while(!q.empty()){
			int x=q.front();q.pop();inq[x]=0;
			for(int j=1;j<=n;j++)
				if(i!=j&&x!=j&&d[x][j]<INF&&d[i][j]==d[i][x]+d[x][j]){
					if(f[i][j]<f[i][x]+1){
						f[i][j]=f[i][x]+1;
						if(!inq[j])inq[j]=1,q.push(j);
					}
				}
		}
		/*
		q.push((edg){i,f[i][i]});
		while(!q.empty()){
			edg e=q.top();q.pop();
			if(inq[e.x])continue;
			inq[e.x]=1;
			for(int j=1;j<=n;j++)
				if(i!=j&&e.x!=j&&d[e.x][j]<INF&&d[i][j]==d[i][e.x]+d[e.x][j]){
					if(f[i][j]<f[i][e.x]+1){
						f[i][j]=f[i][e.x]+1;
						q.push((edg){j,f[i][j]});
					}
				}
		}*/
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			if(d[A][B]==d[A][i]+d[i][j]+d[j][B]&&d[C][D]==d[C][i]+d[i][j]+d[j][D]){
				ans=max(ans,f[i][j]);
			}
		}
	cout<<ans<<endl;
	return 0;
}