我用样例都没过,没开longlong,dis数组没安全赋值的代码骗了100分
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
const int N=1e5+10;
int n,m,q;
vector<int> vc[N];
pair<int,int> d[N];
queue<int> qe;
void spfa()
{
d[1].second=0;
qe.push(1);
int u;
while(!qe.empty()){
u=qe.front();
qe.pop();
for(auto fw:vc[u]){
if(d[fw].first>d[u].second+1 || d[fw].second>d[u].first+1){
if(d[fw].first>d[u].second+1){
d[fw].first=d[u].second+1;
}
if(d[fw].second>d[u].first+1){
d[fw].second=d[u].first+1;
}
qe.push(fw);
}
}
}
return;
}
void solve()
{
cin>>n>>m>>q;
int u,v;
up(i,1,m,1){
cin>>u>>v;
vc[u].push_back(v);
vc[v].push_back(u);
d[i].first=0X3f3f3f3f;
d[i].second=0x3f3f3f3f;
}
spfa();
up(i,1,q,1){
cin>>u>>v;
if(v%2==0){
if(d[u].second<=v){
cout<<"Yes";
}
else{
cout<<"No";
}
}
else{
if(d[u].first<=v){
cout<<"Yes";
}
else{
cout<<"No";
}
}
cout<<endl;
}
return;
}
int main()
{
int _=1;
up(i,1,_,1){
solve();
}
return 0;
}