95分12号点WA求助
查看原帖
95分12号点WA求助
191281
Jr_Zlw楼主2020/10/23 14:00

RT

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#define N 3001
using namespace std;
//
int sum[N],sum1[N],dis[N];
int minn=0x7fffffff,n,m;
bool used[N],jud;
struct node
{
	int dot,num;
	bool operator<(const node &x)const{x.num<num;}
};
priority_queue<node> h;
vector<int> data[N];

//

inline void dij(int ori)
{
	for(int i=1;i<=n;++i)
	{
		dis[i]=0x7fffffff-1;
		used[i]=0;
	}
	jud=0;dis[ori]=0;
	node res;res.dot=ori;
	h.push(res);
    while(!h.empty())
    {
    	node res=h.top();
    	int u=res.dot;h.pop();
//    	cout<<u<<endl;
    	if(used[u]&&jud!=0)continue;
    	jud=1;
    	for(int i=0;i<data[u].size();++i)
    	{
    		int v=data[u][i];
    		if(dis[u]+1<dis[v])
    		{
//    			cout<<"cynb!";
    			dis[v]=dis[u]+1;
    			res.num=dis[v];
    			res.dot=v;
    			h.push(res);
			}
		}
		used[u]=1;
	}
}

//

int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;++i)
	{
		int x,y;cin>>x>>y;
		data[x].push_back(y);
		data[y].push_back(x);
	}
	int x1,t1,x2,t2;
	cin>>x1>>t1>>x2>>t2;
    dij(1);
    for(int i=1;i<=n;++i)sum[i]=dis[i];
    dij(x1);
    for(int i=1;i<=n;++i)
	sum1[i]=dis[i];
    dij(x2);
    for(int i=1;i<=n;++i)
    {
	    if(sum1[i]+sum[i]<=t1)
    	if(sum[i]+dis[i]<=t2)
    	{
    		minn=min(sum[i]+sum1[i]+dis[i],minn);
		}
	}
	if(minn==0x7fffffff)
	{
		cout<<-1;return 0;
	}
	cout<<(m-minn);
	return 0;
}
2020/10/23 14:00
加载中...