求助(玄关)
查看原帖
求助(玄关)
1032960
Danny_chan楼主2024/10/8 22:31

40分

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q;
int d[200010];
vector<int>a[200010];
bool f[200010];
void dj(){
	memset(d,0x3f,sizeof(d));
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
	q.push({1,0});
	d[1]=0;
	while(!q.empty()){
		auto t=q.top();
		q.pop();
		int u=t.first;
		if(f[u]==true) continue;
		f[u]=true;
		for(int i=0;i<a[u].size();i++){
			int x=a[u][i];
			if(d[u]+1<d[x]){
				d[x]=d[u]+1;
				q.push({x,d[x]});
			}
		}
	}
}
signed main(){
	cin>>n>>m>>q;
	while(m--){
		int x,y;
		cin>>x>>y;
		a[x].push_back(y+n);
		a[y+n].push_back(x);
		a[y].push_back(x+n);
		a[x+n].push_back(y);
	}
	dj();
	while(q--){
		int x,y;
		cin>>x>>y;
		if(y%2==1){
			if(y>=d[x+n]){
				cout<<"Yes"<<endl;
			}
			else cout<<"No"<<endl;
		}
		else{
			if(y>=d[x]){
				cout<<"Yes"<<endl;
			}
			else cout<<"No"<<endl;
		}
	}
	return 0;
}
2024/10/8 22:31
加载中...