95分求助! 第一个点竟然没过!
查看原帖
95分求助! 第一个点竟然没过!
365777
halehu楼主2021/8/19 09:03
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,x,y,dis[3005][3005];
int q[10005],font=10004,back=10004,s1,s2,t1,t2,i,sum=0;
int d1[3005],d2[3005],d3[3005],vis[3005]={0};
long long maxn=1e9;
int minn=maxn;
void push(int x){
	q[back]=x;
	back--;
}
void pop(){font--;}
int front(){return q[font];}
bool empty(){return back==font;}
void SPFA(int u,int *d)
{   
    int j,k;
	for(i=1;i<=n;i++)d[i]=maxn;
	d[u]=0;
	push(u);
	vis[u]=1;
	while(!empty())
	{
		int x=front();
		pop();
		for(j=1;j<=n;j++)
		{
			if(x!=j&&dis[x][j]==1&&d[j]>d[x]+1)
			{
				d[j]=d[x]+1;
				if(!vis[j])
				{
					push(j);
					vis[j]=1;
				}
			}
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		dis[x][y]=1;
		dis[y][x]=1;
		sum++;
	}
	scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
	SPFA(1,d1);
	SPFA(s1,d2);
	SPFA(s2,d3);
    for(i=1;i<=n;i++)
    {
    	if(d1[i]+d2[i]<=t1&&d1[i]+d3[i]<=t2)
    	   minn=min(d1[i]+d2[i]+d3[i],minn);
	}
	if(minn==maxn)printf("-1");
	else printf("%d",sum-minn);
	return 0;
} 
2021/8/19 09:03
加载中...