为什么有些对有些不对啊,走了一遍程序也没问题啊
查看原帖
为什么有些对有些不对啊,走了一遍程序也没问题啊
1052499
Em0ty楼主2023/8/13 15:48

a数组记路径,mp记连接的边,mp[i][0]记有i点有几个边相连。

#include<bits/stdc++.h>
using namespace std;

int n,m,Q;
int mp[1000000][1000000];
int a[1000000];

void f(int fr,int to){
	queue<int> q;
	q.push(fr);
	a[fr]=to;
	while(!q.empty()){
		if(a[1]==0){
			printf("Yes\n");
			return ;
		}
		for(int i = 1;i<=mp[q.front()][0];i++){
			if(a[q.front()]>=0&&a[mp[q.front()][i]]!=a[q.front()]-1){
				q.push(mp[q.front()][i]);
				a[mp[q.front()][i]]=a[q.front()]-1;
			}
		}
		q.pop();
	}
	printf("No\n");
}

int main(){
	scanf("%d%d%d",&n,&m,&Q);
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		mp[y][mp[x][0]+1]=x;
		mp[x][mp[x][0]+1]=y;
		mp[y][0]++;
		mp[x][0]++;
	}
	memset(a,0x3f,sizeof(a));
	for(int i=1;i<=Q;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		f(x,y);
		memset(a,0x3f,sizeof(a));
	}
	
	
	return 0;
}

2023/8/13 15:48
加载中...