90分求助
查看原帖
90分求助
357265
peapapig楼主2023/8/22 16:10
#include<bits/stdc++.h>
using namespace std;
const int N=3e3+9;
long long n,m,head[N],cnt,g[N],l[5][N],s1,s2,t1,t2,ans=99999999999,s,o[N];
queue <long long> k;
struct edge{
	long long nex,t;
}e[N<<1];
void addedge(long long x,long long y){
	e[++cnt].nex=head[x];
	e[cnt].t=y;
	head[x]=cnt;
}
void bfs(long long x){
	s++;
	k.push(x);
	g[x]=1;
	for(int i=1;i<=n;i++)
		if(i!=x)l[s][i]=1;
	while(!k.empty()){
		for(int i=head[k.front()];i;i=e[i].nex){
			if(g[e[i].t]==0){
				g[e[i].t]=1;
				l[s][e[i].t]+=l[s][k.front()];
				k.push(e[i].t);
			}
		}
		k.pop();
	}
	memset(g,0,sizeof g);
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=m;i++){
		long long x,y;
		scanf("%lld%lld",&x,&y);
		o[x]=o[y]=1;
		addedge(x,y);
		addedge(y,x);
	}
	scanf("%lld%lld%lld%lld",&s1,&t1,&s2,&t2);
	bfs(1);
	bfs(s1);
	bfs(s2);
	ans=99999999999;
	if(l[1][s1]>t1||l[1][s2]>t2)printf("-1");
	  else {
	  	for(int i=1;i<=n;i++){
		  	if(l[1][i]+l[2][i]<=t1&&l[1][i]+l[3][i]<=t2&&o[i]!=0)
				ans=min(l[1][i]+l[2][i]+l[3][i],ans);
		  }
		printf("%lld",m-ans);
	  }
	return 0;
}
2023/8/22 16:10
加载中...