请大佬指点(两个点tle了)
查看原帖
请大佬指点(两个点tle了)
435388
liang_bowen楼主2021/8/26 20:31
#include<bits/stdc++.h>
using namespace std;
int n,m,s,ss,tt,t,d[3010][4],sum=1e9;
vector<int> v[3010];
queue<int> q;
bool b; 
long long INF= 0x3f3f3f3f;
void f(int st,int se,int e,int w)
{
	if(st==se)
	{
  		d[w][e]=0;
  		return;
 	}
 	int dd[3010];
 	memset(dd,INF,sizeof(dd));
 	q.push(st);
 	dd[st]=0;
 	while(!q.empty())
 	{
 	 	int x=q.front();
 	 	q.pop();
  		for(int i=0;i<v[x].size();i++)
 	 	{
 	  		if(dd[v[x][i]]==INF)
 	  		{
 	   			q.push(v[x][i]);
  	  			dd[v[x][i]]=dd[x]+1;
 		  	}
  		}
 	}
    d[w][e]=dd[se];
 	return;
}
int main()
{
 	cin>>n>>m;
 	for(int i=1;i<=m;i++)
 	{
 	 	int x,y;
 	 	cin>>x>>y;
	 	v[x].push_back(y);
  		v[y].push_back(x);
 	}
 	cin>>s>>t>>ss>>tt;
 	for(int i=1;i<=n;i++)
 	{
  		f(1,i,1,i);
  		f(i,s,2,i);
  		f(i,ss,3,i);
  		if(sum>=d[i][1]+d[i][2]+d[i][3])
  		{
  			if(d[i][1]+d[i][2]<=t&&d[i][1]+d[i][3]<=tt)
  			{
  				b=1;
  				sum=d[i][1]+d[i][2]+d[i][3];
			}
		}
 	}
 	if(b==0)cout<<-1;
 	else cout<<m-sum;
}
2021/8/26 20:31
加载中...