#include<iostream>
#include<cstdio>
using namespace std;
int l[1010][1010],flag,n,m,q,u,v,a,j;
void dfs(int b,int c)
{
if(flag==1)return;
if(c==1)
{
if(l[b][1]==1||l[1][b]==1)flag=1;
return;
}
for(int i=1;i<=n;i++)
{
if(flag==1)return;
if(l[b][i]==1||l[i][b]==1)
{
dfs(i,c-1);
}
}
}
int main()
{
//freopen("work.in","r",stdin);
//freopen("work.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
l[u][v]=1;
}
for(int i=1;i<=q;i++)
{
flag=0;
cin>>a>>j;
dfs(a,j);
if(flag==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
而且
我一年前写过的代码现在看不懂(20分),哪位可以帮我解释一下QwQ
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int x[10010];
int main()
{
int n,m,q,a,b,s=0;
cin>>n>>m>>q;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
if(a==1)
{
s++;
x[s]=b;
}
else if(b==1)
{
s++;
x[s]=a;
}
}
a=0;b=0;
for(int i=1;i<=q;i++)
{
int flag=0;
cin>>a>>b;
for(int j=1;j<=s;j++)
{
if(x[j]==a)
{
cout<<"Yes"<<endl;
flag=1;
break;
}
}
if(!flag)cout<<"No"<<endl;
}
return 0;
}