55分求助
查看原帖
55分求助
342651
rpdg楼主2020/8/15 13:25
#include<bits/stdc++.h>
using namespace std;
struct Edge{
	int to;
	int ne;
	int a;
} e[200011];
int head[200011],ji[200011],ou[200011],idx=1,ans[200011],INF=0x7f7f7f7f;
int n,m,q,l;
void add(int u,int v)
{
	e[idx].to=v;
	e[idx].a=idx;
	e[idx].ne=head[u];
	head[u]=idx++;
}
void bfs()
{
	memset(ji,INF,sizeof(ji));
	memset(ou,INF,sizeof(ou));
	queue <int> q;
	for(int i=head[1];i;i=e[i].ne)
	{
		ji[e[i].to]=1;
		ans[e[i].to]=1;
		q.push(e[i].to);
	}
	while(q.size())
	{
		int x=q.front(),y=ans[x];
		for(int i=head[x];i;i=e[i].ne)
		{
			if(y%2==1)
			{
				if(y+1<ou[e[i].to])
				{
					ou[e[i].to]=y+1;
					ans[e[i].to]=y+1;
					q.push(e[i].to);
				}
			}
			else if(y%2==0)
			{
				if(y+1<ji[e[i].to])
				{
					ji[e[i].to]=y+1;
					ans[e[i].to]=y+1;
					q.push(e[i].to);
				}
			}
		}
		q.pop();
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	bfs();
	while(q--)
	{
		int a,l;
		scanf("%d%d",&a,&l);
		if(a==1&&l==1)
		{
			puts("No");
			continue;
		}
		if(l%2==0)
		{
			if(ou[a]>l)
			puts("No");
			else
			puts("Yes");
		}
		else
		{
			if(ji[a]>l)
			puts("No");
			else
			puts("Yes");
		}
	}
	return 0;
}

感觉是对的啊??

2020/8/15 13:25
加载中...