这是DFS
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
int num,ans;
vector<vector<int>> vec;
int du[600000][2];
void dfs(int a,int step)
{
for (int i:vec[a])
{
if(step%2==0&&step<du[i][1])
{
du[i][1]=step;
dfs(i,step+1);
}
if(step%2==1&&step<du[i][0])
{
du[i][0]=step;
dfs(i,step+1);
}
}
}
int main()
{
int n,m,q;
std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin>>n>>m>>q;
vec.resize(n+1);
for (int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
vec[x].push_back(y);
vec[y].push_back(x);
}
memset(du,0x3f,sizeof(du));
dfs(1,1);
for (int i=1;i<=q;i++)
{
int op,ed;
cin>>op>>ed;
if(ed%2==0)
{
if(du[op][1]>ed) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
else
{
if(du[op][0]>ed) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
return 0;
}
这是BFS(主函数不变):
void bfs()
{
queue<int> que;
int step=1;
for (int i:vec[1])
{
du[i][0]=step;
que.push(i);
}
while(que.size())
{
int cnt=que.size();
step++;
while(cnt--)
{
int cp=que.front();
que.pop();
for (int i:vec[cp])
{
if(step%2==0&&step<du[i][1])
{
du[i][1]=step;
que.push(i);
}
if(step%2==1&&step<du[i][0])
{
du[i][0]=step;
que.push(i);
}
}
}
}
}
到底哪里有区别?