比赛 |
近期练习题回顾 |
评测结果 |
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;
}