80分求助,最后四个点t了
查看原帖
80分求助,最后四个点t了
147685
Chen_pi_楼主2020/8/27 19:13
#include<iostream>
#include<string.h>
using namespace std;
int nxt[100000],head[100000],to[100000],cnt=0,fin[100001][3];	
int queue[100000001][2];
void add(int u,int v){
	nxt[++cnt]=head[u];
	head[u]=cnt;
	to[cnt]=v;
}
int main(){
	memset(fin,-1,sizeof(fin));
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++){
		int a1,b1;
		cin>>a1>>b1;
		add(a1,b1);
		add(b1,a1);
	}
	int q_head=0,q_tail=1;
	queue[0][0]=1;
	queue[0][1]=0;
	fin[1][2]=0;
	
	while(q_head<q_tail){
		int now=queue[q_head][0];
		int count=queue[q_head][1]+1;
			for(int i=head[now];i;i=nxt[i]){
				if(fin[to[i]][count%2]==-1){
					fin[to[i]][count%2]=count;
					queue[q_tail][0]=to[i];
					queue[q_tail][1]=count;
					//cout<<to[i]<<' '<<count<<endl;
					q_tail++;
				}
			}
		q_head++;
	}
	int a,L;
	for(int i=1;i<=q;i++){
		cin>>a>>L;
		
		if(fin[a][L%2]<=L&&fin[a][L%2]!=-1)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}


2020/8/27 19:13
加载中...