40pts求助
查看原帖
40pts求助
333574
Tyyyyyy楼主2020/10/30 12:23

rt

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,s1,t1,s2,t2,c[3005][3005],ro[3][3005],ans=1e9;
void bfs(int k)
{
	queue<pair<int,int> >q;
	int l;
	if(k==0)l=1;
	if(k==1)l=s1;
	if(k==2)l=s2;
	for(int i=1;i<=c[l][0];i++)
	{
		ro[k][c[l][i]]=1;
		q.push(make_pair(c[l][i],1));
	}
	while(!q.empty())
	{
		int f1=q.front().first;
		int f2=q.front().second;
		for(int i=1;i<=c[f1][0];i++)
		{
			if(f2+1<ro[k][c[f1][i]])
			{
				ro[k][c[f1][i]]=f2+1;
				q.push(make_pair(c[f1][i],f2+1));
			}
		}
		q.pop();
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		c[x][++c[x][0]]=y;
		c[y][++c[y][0]]=x;
	}
	scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
	memset(ro,0x3f,sizeof(ro));
	bfs(0);bfs(1);bfs(2);
	for(int i=1;i<=n;i++)
	{
		if(ro[0][i]+ro[1][i]<=t1&&ro[0][i]+ro[2][i]<=t2)
		{
			ans=min(ans,ro[0][i]+ro[1][i]+ro[2][i]);
		}
	}
	if(ans==1e9)ans=-1;
	else ans=m-ans;
	printf("%d",ans);
	return 0;
}
2020/10/30 12:23
加载中...