样例过不了,求助
查看原帖
样例过不了,求助
744562
Aya_tt楼主2022/10/6 22:30
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int cnt, n, m, t, head[N * 2], dis[N][2];
bool vis[N][2];
struct qedge{
	int to, nxt;
}edge[N * 2];
void add(int x, int y){
	edge[++cnt].to = y;
	edge[cnt].nxt = head[x];
	head[x] = cnt;
}
queue<int> q; 
void spfa(){
	memset(dis, 0x3f, sizeof dis);
	dis[1][0] = 0;// 0 偶数,1 奇数
	if(head[1] == 0) dis[1][0] = 0x3f3f3f3f;
	q.push(1);
	//dis[1][0] = 0; 
	while(!q.empty()){
		int u = q.front();
		for(int i = head[u];i;i = edge[i].nxt){
			int v = edge[i].to;
			if(dis[v][0] > dis[v][1] + 1){
				dis[v][0] = dis[v][1] + 1;
				if(!vis[v][0]){
					vis[v][0] = 1;
					q.push(v);
				}
			}
			if(dis[v][1] > dis[v][0] + 1){
				dis[v][1] = dis[v][0] + 1;
				if(!vis[v][1]){
					vis[v][1] = 1;
					q.push(v);
				}
			}
		}
		q.pop();
	} 
}
int main(){
	cin >> n >> m >> t;
	for(int i = 1;i <= m;i++){
		int u, v;
		cin >> u >> v;
		add(u, v), add(v, u);
	}
	spfa();
	while(t--){
		int u, L;
		cin >> u >> L;
		if(dis[u][L % 2] <= L){
			cout << "Yes" << endl;
		}
		else{
			cout << "No" << endl;
		}
	}
}
2022/10/6 22:30
加载中...