错的几个点好像都输出了-1,#11~#16
#include<bits/stdc++.h>
#define maxn 3010
using namespace std;
inline void read(int& x)
{
x=0;
int y=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')y=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
x=x*y;
}
struct edge{
int to,next;
}heq[maxn*2];
int head[maxn];
struct xky{
int dis,u;
xky(int dis_,int u_)
{
dis=dis_,u=u_;
}
bool operator <(const xky &xx)const
{
return dis<xx.dis;
}
};
priority_queue<xky> q;
int s1,s2,t1,t2,n,m;
int ky=0;
inline void add(int u,int v)
{
heq[++ky].to=v;
heq[ky].next=head[u];
head[u]=ky;
}
int d[maxn][3];
bool vis[maxn];
inline void dijkstra(int s)
{
int x;
if(s==1)x=0;if(s==s1)x=1;if(s==s2)x=2;
while(!q.empty())q.pop();
memset(vis,0,sizeof(vis));
q.push(xky(0,s));
d[s][x]=0;
while(q.size())
{
int u=q.top().u,dis=q.top().dis;
q.pop();
if(vis[u])continue;
vis[u]=1;
for(int i=head[u];i;i=heq[i].next)
{
int v=heq[i].to;
if(d[v][x]>d[u][x]+1)
{
d[v][x]=d[u][x]+1;
q.push(xky(d[v][x],v));
}
}
}
}
int main(){
read(n),read(m);
int u,v;
for(int i=1;i<=m;i++)
{
read(u),read(v);
add(u,v);
add(v,u);
}
read(s1),read(t1),read(s2),read(t2);
memset(d,0x3f,sizeof(d));
dijkstra(1);
dijkstra(s1);
dijkstra(s2);
int ans=-1;
for(int i=1;i<=n;i++)
{
if(d[i][0]+d[i][1]<=t1&&d[i][0]+d[i][2]<=t2)ans=max(ans,m-d[i][0]-d[i][1]-d[i][2]);
}
printf("%d\n",ans);
return 0;
}