错了#14,#15,#16,求大佬改错,bfs写的
查看原帖
错了#14,#15,#16,求大佬改错,bfs写的
213196
Wens楼主2020/11/1 19:06
#include<bits/stdc++.h>
#define N 100100
#define INF 12345678
using namespace std;
int n,m,q;
int cnt,next[N<<1],to[N<<1],head[N];
int dis1[N],dis2[N];
bool vis[N];
void add(int x,int y){
	next[++cnt]=head[x];
	to[cnt]=y;
	head[x]=cnt;
}

void bfs(){
	for(int i=1;i<=n;++i)dis1[i]=dis2[i]=INF;
	dis1[1]=dis2[1]=0;
	queue<int > q;
	q.push(1);
	while(!q.empty()){
		int x=q.front();
		q.pop();
//		cout<<x<<endl;
		for(int i=head[x];i;i=next[i]){
			int tt=to[i];
//			cout<<x<<" "<<tt<<" "<<dis1[x]<<" "<<dis2[x]<<" "<<dis1[tt]<<" "<<dis2[tt]<<endl;
			if(dis1[tt]>dis2[x]+1&&dis2[x]%2==0){
				dis1[tt]=dis2[x]+1;
				q.push(tt);
			}
			if(dis2[tt]>dis1[x]+1&&dis1[x]%2==1){
				dis2[tt]=dis1[x]+1;
				q.push(tt);
			}
		}
	}
}

int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=m;++i){
		int x,y;
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
//	cout<<"----------------------------"<<endl;
	bfs();
	dis1[1]=dis2[1]=INF;
	for(int i=head[1];i;i=next[i]){
		int tt=to[i];
		dis1[1]=min(dis2[tt]+1,dis1[1]);
		dis2[1]=min(dis1[tt]+1,dis2[1]);
	}
//	for(int i=1;i<=n;++i)cout<<i<<" "<<dis1[i]<<" "<<dis2[i]<<endl;
//	cout<<"----------------------------"<<endl;
	for(int i=1;i<=q;++i){
		int x,l;
		cin>>x>>l;
		if((dis1[x]<=l&&(l-dis1[x])%2==0)||(dis2[x]<=l&&(l-dis2[x])%2==0))cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}
2020/11/1 19:06
加载中...