数据点下载都过了但是WA17个点RE3个点求助
查看原帖
数据点下载都过了但是WA17个点RE3个点求助
957650
Utopioa_iris楼主2024/7/14 11:44

rt,代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m,q,cnt,head[10000001],dis[10000001][2],vis[1001][1001],q1[1000001],q2[1000001],l,r;
struct edge
{
	int nxt,to;	
}e[10000001];
void add(int u,int v)
{
	e[++cnt].to=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
void spfa()
{
	for(int i=1;i<=n;i++)
		dis[i][1]=dis[i][0]=1e9;
	dis[1][0]=0;
	l=1;
	r=0;
	q1[++r]=1;
	while(l<=r)
	{
		int x=q1[l];
		int y=q2[l];
		l++;
		vis[x][y]=0;
		for(int i=head[x];i;i=e[i].nxt)
		{
			int v=e[i].to;
			if(dis[v][0]>dis[x][1]+1)
			{
				dis[v][0]=dis[x][1]+1;
				if(!vis[v][0])
				{
					vis[v][0]=1;
					q1[++r]=v;
					q2[r]=0;
				}
			} 
			if(dis[v][1]>dis[x][0]+1)
			{
				dis[v][1]=dis[x][0]+1;
				if(!vis[v][1])
				{
					vis[v][1]=1;
					q1[++r]=v;
					q2[r]=1;
				}
			}
		}
	}
	return; 
}
signed main()
{
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	spfa();
	if(head[1]==0)
		dis[1][0]=1e9;
	for(int i=1;i<=q;i++)
	{
		int a,L;
		cin>>a>>L;
		if(l>=dis[a][L%2])
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	return 0;
}
2024/7/14 11:44
加载中...