求调
查看原帖
求调
726291
ruanweijie楼主2023/10/4 20:33
#include<bits/stdc++.h>
using namespace std;
#define N 200020
int head[N],cnt,n,m,Q,dis[N],vis[N];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
struct Edge{int to,nxt;}edge[N<<1];
void add(int a,int b){cnt++;edge[cnt].to=b;edge[cnt].nxt=head[a];head[a]=cnt;}
int main(){
	cin>>n>>m>>Q;
	for(int i=1;i<=m;i++){cin>>u>>v;add(u,v+n),add(v+n,u),add(u+n,v),add(v,u+n);}
	memset(dis,0x3f,sizeof(dis));
	dis[1]=0;
	q.push(make_pair(0,1));
	while(!q.empty()){
		int u=q.top().second;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].nxt){
			int v=edge[i].to;
			if(dis[v]>dis[u]+1){dis[v]=dis[u]+1;q.push(make_pair(dis[v],v));}
		}
	}
	while(Q--){
		cin>>a>>L;
		L&1?printf(dis[a+n]<=L?"Yes\n":"No\n"):printf(dis[a]<=L?"Yes\n":"No\n");
	}
}

2023/10/4 20:33
加载中...