60分,A前12个点
查看原帖
60分,A前12个点
150611
mrozhx楼主2020/10/23 13:53
#include<bits/stdc++.h>
using namespace std;
long long next[200001],to[200001],head[200001],tot=0;
long long dis[200001][2];
bool vis[200001];
queue<int> q;
queue<bool> pd;
int n,m,k;
void bfs(int x){
	for(int i=1;i<=n;i++){
		dis[i][0]=dis[i][1]=0x3f3f3f3f;
	}
	memset(vis,false,sizeof(vis));
	dis[x][0]=0;
	q.push(x);
	pd.push(0);
	while(!q.empty()){
		int now=q.front();
		bool kind=pd.front();
		vis[now]=false;
		q.pop();
		pd.pop();
		for(int i=head[now];i;i=next[i]){
			int nxt=to[i];
			if(!vis[nxt]&&dis[now][kind]+1<dis[nxt][!kind]){
				dis[nxt][!kind]=dis[now][kind]+1;
				q.push(nxt);
				pd.push(!kind); 
				vis[nxt]=true;
			}
		}
	}
}
void add(int x,int y){
	to[++tot]=y;
	next[tot]=head[x];
	head[x]=tot;
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	int x,y;
	bool flag=false;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		if(x==1||y==1) flag=true;
		add(x,y);
		add(y,x);
	}
	bfs(1);
	while(k--){
		scanf("%d%d",&x,&y);
		if(x==1){
			if(flag==false){
				cout<<"No"<<endl;
				continue;
			}
		}
		if(y>=dis[x][y%2]){
			cout<<"Yes"<<endl;
		//	cout<<dis[1][0]<<" "<<dis[1][1]<<endl;
		} 
		else{
			cout<<"No"<<endl;
		//	cout<<dis[1][0]<<" "<<dis[1][1]<<endl;
		}
	}
	return 0;
}
2020/10/23 13:53
加载中...