tj
2025-10-10 12:59:32
发布于:福建
13阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const long long N = 1e6 + 100;
vector<long long> vex[N];
long long odd[N] , even[N];
struct point {
long long to , step;
};
void bfs ( ) {
memset(odd , 0x3f , sizeof odd);
memset(even , 0x3f , sizeof even);
queue<point> q;
for (int i = 0 ; i < vex[1].size() ; i++) {
long long v = vex[1][i];
odd[v] = 1;
q.push({v , 1});
}
while (!q.empty()) {
point p = q.front();
q.pop();
long long u = p.to;
long long s=p.step;
for (int i = 0 ; i < vex[u].size() ; i++) {
long long v = vex[u][i];
if (s % 2 == 1) {
if (s + 1 < even[v]) {
even[v] = s + 1;
q.push({v , s + 1});
}
} else {
if (s + 1 < odd[v]) {
odd[v] = s + 1;
q.push({v , s + 1});
}
}
}
}
}
int main( ) {
long long n , m , q;
cin >> n >> m >> q;
for(int i = 1 ; i <= m ; i++){
long long u , v;
cin >> u >> v;
vex[u].push_back(v);
vex[v].push_back(u);
}
bfs();
while(q--){
long long a , L;
cin >> a >> L;
if (L % 2 == 0) {
if (L >= even[a]) {
cout << "Yes" << endl;
}
else cout << "No" << endl;
} else {
if (L >= odd[a]) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
}
return 0;
}
中午写的题,晚上看一下有没有time发一下思路
这里空空如也


有帮助,赞一个