#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+10;
const int maxm=2e5+10;
const int inf=1e15;
int n,m,q,cnt;
int head[maxn],que[maxn],dis0[maxn],dis1[maxn];
bool vis[maxn];
struct node{
int v,nxt;
}e[maxm];
inline void add(int u,int v){
e[++cnt].v=v;
e[cnt].nxt=head[u];
head[u]=cnt;
}
inline void input(){
scanf("%lld%lld%lld",&n,&m,&q);
for(int i=1;i<=m;i++){
int u,v;
scanf("%lld%lld",&u,&v);
add(u,v);
add(v,u);
}
}
inline void bfs(){
for(int i=1;i<=n;i++)dis0[i]=inf;
int l=0,r=0;
vis[1]=true;
que[r++]=1;
dis0[1]=0;
while(l<r){
int x=que[l++];
queue<int>s;
for(int i=head[x];i;i=e[i].nxt){
int v=e[i].v;
s.push(v);
}
while(!s.empty()){
int t=s.front();
s.pop();
for(int i=head[t];i;i=e[i].nxt){
int v=e[i].v;
if(!vis[v]){
vis[v]=true;
dis0[v]=dis0[x]+2;
que[r++]=v;
}
}
}
}
}
inline void bfs1(){
memset(vis,false,sizeof(vis));
for(int i=1;i<=n;i++)dis1[i]=inf;
int l=0,r=0;
for(int i=head[1];i;i=e[i].nxt){
int v=e[i].v;
vis[v]=true;
que[r++]=v;
dis1[v]=1;
}
while(l<r){
int x=que[l++];
queue<int>s;
for(int i=head[x];i;i=e[i].nxt){
int v=e[i].v;
s.push(v);
}
while(!s.empty()){
int t=s.front();
s.pop();
for(int i=head[t];i;i=e[i].nxt){
int v=e[i].v;
if(!vis[v]){
vis[v]=true;
dis1[v]=dis1[x]+2;
que[r++]=v;
}
}
}
}
}
inline void calculate(){
bfs();
bfs1();
// for(int i=1;i<=5;i++)printf("%d = %d %d\n",i,dis0[i],dis1[i]);
}
inline void solve(){
while(q--){
int p,w;
scanf("%lld%lld",&p,&w);
if(dis0[p]>w&&dis1[p]>w){
printf("No\n");
continue;
}
if(((dis0[p]-w)%2==0&&dis0[p]<=w)||((dis1[p]-w)%2==0&&dis1[p]<=w))printf("Yes\n");
else printf("No\n");
}
}
signed main(){
input();
calculate();
solve();
return 0;
}
本人猜测 O(n+2⋅m) 求大佬分析