35分求条
查看原帖
35分求条
730113
Rolen楼主2024/8/26 08:20
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb(x,y) e[x].push_back(y)
ll n,m,u,v,s1,t1,s2,t2,ans,bo[4000];
ll f[10][4000];
vector<ll>e[4000];
queue<ll>q;
void dj(){
	f[1][1]=0;
	q.push(1);
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		if(bo[u]) continue;
		bo[u]=1;
		for(int i=0;i<e[u].size();i++){
			if(f[1][e[u][i]]>f[1][u]+1){
				q.push(e[u][i]);
				bo[e[u][i]]=0;
				f[1][e[u][i]]=f[1][u]+1;
			}
		}
	}
	memset(bo,0,sizeof(bo));
	f[2][s1]=0;
	q.push(s1);
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		if(bo[u]) continue;
		bo[u]=1;
 		for(int i=0;i<e[u].size();i++){
 			
 			ll po=0;
 			po=1;
			if(f[2][e[u][i]]>f[2][u]+1){
				q.push(e[u][i]);
				bo[e[u][i]]=0;
				f[2][e[u][i]]=f[2][u]+1;
			}
		}
	}
	memset(bo,0,sizeof(bo));
	f[3][s2]=0;
	q.push(s2);
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		if(bo[u]) continue;
		bo[u]=1;
		for(int i=0;i<e[u].size();i++){
			if(f[3][e[u][i]]>f[3][e[u][i]]+1){
				q.push(e[u][i]);
				bo[e[u][i]]=0;
				f[3][e[u][i]]=f[3][u]+1;
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		pb(u,v);
		pb(v,u);
	}
	memset(f,0x3f3f3f,sizeof(f));
	cin>>s1>>t1>>s2>>t2;
	dj();
	ans=LONG_LONG_MAX;
	for(int i=1;i<=n;i++){
		if(f[1][i]+f[2][i]<=t1&&f[1][i]+f[3][i]<=t2){
			ans=min(ans,f[1][i]+f[2][i]+f[3][i]);
		}
	}
	if(ans==LONG_LONG_MAX) {
		cout<<-1;
		return 0;
	}
	cout<<m-ans;
}

不知道哪里错了

2024/8/26 08:20
加载中...