样例二错求调
查看原帖
样例二错求调
1021365
Crab_Tang楼主2023/12/20 12:54
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1e5+10;
int Begin[N],Next[2*N],To[2*N],ji[N],ou[N];
int n,m,q,u,v,e;
queue<pair<int,int>>que;
pair<int,int>now;
void add(int x,int y){
	To[++e]=y;
	Next[e]=Begin[x];
	Begin[x]=e;
}
void bfs(){
	memset(ji,0x3f,sizeof ji);
	memset(ou,0x3f,sizeof ou);
	for(int i=Begin[1];i;i=Next[i]){
		ji[To[i]]=1;
		que.push(make_pair(To[i],1));
	}
	while(!que.empty()){
		now=que.front();
		que.pop();
		for(int i=Begin[now.first];i;i=Next[i]){
			if(now.second%2==1){
				if(now.second+1<ou[To[i]]){
					ou[To[i]]=now.second+1;
					que.push(make_pair(i,ou[To[i]]));
				}
			}
			else if(now.second+1<ji[To[i]]){
				ji[To[i]]=now.second+1;
				que.push(make_pair(i,ji[To[i]]));
			}
		}
	}
	return ;
}
int main(){
	scanf("%d %d %d",&n,&m,&q);
	for(int i=1;i<=m;++i){
		scanf("%d %d",&u,&v);
		add(u,v);
		add(v,u);
	}
	bfs();
	while(q--){
		scanf("%d %d",&u,&v);
		if(v%2==0){
			if(ou[u]>v)puts("NO");
			else puts("YES");
		}
		else{
			if(ji[u]>v)puts("NO");
			else puts("YES");
		}
	}
	return 0;
}

第一篇题解的思路用链式前向星存图。

2023/12/20 12:54
加载中...