问,听灌佬多
  • 板块灌水区
  • 楼主MarsNotFound
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/10/25 21:02
  • 上次更新2024/10/25 21:38:48
查看原帖
问,听灌佬多
973789
MarsNotFound楼主2024/10/25 21:02
#include<bits/stdc++.h>
#define inf 0x7f7f7f7f
using namespace std;

const int N=10005;

int n,m,s,t,ss,tt,ans=inf;

int head[N<<1],e[N<<1],ne[N<<1],idx=1;

inline void add(int x,int y)
{
	ne[idx]=head[x];
	e[idx]=y;
	head[x]=idx++;
}

int dis1[N],dis2[N],dis3[N];

bool vis[N];

struct node
{
	int x,dis;
	bool operator < (const node &p)const{return dis<p.dis;}
};

void dijkstra(int ls,int *dis)
{
	memset(vis,0,sizeof(vis));
	dis[ls]=0;
	priority_queue<node>q;
	q.push({ls,0});
	while(!q.empty())
	{
		node u=q.top();
		q.pop();
		if(vis[u.x])continue;
		vis[u.x]=1;
		for(int i=head[u.x];i!=-1;i=ne[i])
		{
			if(dis[e[i]]>dis[u.x]+1)
			{
				dis[e[i]]=dis[u.x]+1;
				node v={e[i],-dis[e[i]]};//为什么这里去掉-号只有60分???
				q.push(v);
			}
		}
	}
}

signed main()
{
	memset(head,-1,sizeof(head));
	cin>>n>>m;
	for(int i=1,x,y;i<=m && cin>>x>>y;i++)
		add(x,y),add(y,x);	
	cin>>s>>t>>ss>>tt;
	memset(dis1,inf,sizeof(dis1));
	memset(dis2,inf,sizeof(dis2));
	memset(dis3,inf,sizeof(dis3));
	dijkstra(1,dis1);
	if(dis1[s]>t || dis1[ss]>tt)cout<<-1;
	else
	{
		dijkstra(s,dis2);
		dijkstra(ss,dis3);
		for(int i=1;i<=n;i++)
			if(dis1[i]+dis2[i]<=t && dis1[i]+dis3[i]<=tt)
				ans=min(ans,dis1[i]+dis2[i]+dis3[i]);
		cout<<m-ans;
	};
	return 0;
}

题目

2024/10/25 21:02
加载中...